 |
Programaci�n en
PHP |
Introducci�n a la programaci�n en
PHP
PHP es uno de los lenguajes de lado servidor m�s
extendidos en la web. Nacido en 1994, se trata de un lenguaje de creaci�n
relativamente creciente que ha tenido una gran aceptaci�n en la comunidad de
webmasters debido sobre todo a la potencia y simplicidad que lo caracterizan.
PHP nos permite embeber su peque�os fragmentos de c�digo dentro de la
p�gina HTML y realizar determinadas acciones de una forma f�cil y eficaz sin
tener que generar programas programados �ntegramente en un lenguaje distinto al
HTML. Por otra parte, y es aqu� donde reside su mayor inter�s con respecto a los
lenguajes pensados para los CGI, PHP ofrece un sinf�n de funciones para la
explotaci�n de bases de datos de una manera llana, sin complicaciones.
Podr�amos efectuar la quiz�s odiosa comparaci�n de decir que PHP y ASP
son lenguajes parecidos en cuanto a potencia y dificultad si bien su sintaxis
puede diferir sensiblemente. Algunas diferencias principales pueden, no
obstante, mencionarse:
-PHP, aunque multiplataforma, ha sido concebido
inicialmente para entornos UNIX y es en este sistema operativo donde se pueden
aprovechar mejor sus prestaciones. ASP, siendo una tecnolog�a Microsoft, esta
orientado hacia sistemas Windows, especialmente NT.
-Las tareas
fundamentales que puede realizar directamente el lenguaje son definidas en PHP
como funciones mientras que ASP invoca m�s frecuentemente los objetos. Por
supuesto, esto no es m�s que una simple cuesti�n de forma ya que ambos lenguajes
soportan igualmente ambos procedimientos.
-ASP realiza numerosas tareas
sirvi�ndose de componentes (objetos) que deben ser comprados (o programados) por
el servidor a determinadas empresas especializadas. PHP presenta una filosof�a
totalmente diferente y, con un esp�ritu m�s generoso, es progresivamente
construido por colaboradores desinteresados que implementan nuevas funciones en
nuevas versiones del lenguaje.
Este manual va destinado a aquellos que
quieren comenzar de cero el aprendizaje de este lenguaje y que buscan en �l la
aplicaci�n directa a su proyecto de sitio o a la mejora de su sitio HTML. Los
cap�tulos son extremadamente simples, sino simplistas, buscando ser accesibles a
la mayor�a. Ellos pueden ser complementados posteriormente con otros art�culos de mayor
nivel destinados a gente m�s experimentada.
La forma en la
que hemos redactado este manual lo hace accesible a cualquier persona no
familiarizada con la programaci�n. Sin embargo, es posible que en determinados
momentos alguien que no haya programado nunca pueda verse un poco desorientado.
Nuestro consejo es el de no querer entender todo antes de pasar al siguiente
cap�tulo sino intentar asimilar algunos conceptos y volver atr�s en cuanto una
duda surja o hayamos olvidado alg�n detalle. Nunca viene mal leer varias veces
lo mismo hasta que quede bien grabado y asimilado.
Antes de comenzar a
leer este manual es altamente aconsejable, sino imprescindible, haber le�do
previamente el manual sobre manual sobre p�ginas
din�micas en el cual se explica a grandes rasgos qu� es el PHP,
algunos conceptos �tiles sobre el modo de trabajar con p�ginas din�micas al
mismo tiempo que nos introduce algunos elementos b�sicos de la programaci�n como
pueden ser las variables y las funciones.
Otra referencia a la cual
haremos alusi�n es el tutorial de
SQL que nos ser� de gran ayuda para el tratamiento de bases de
datos.
Esperamos que este manual resulte de vuestro agrado y que
corresponda a nuestras expectativas: El poder acercar PHP a todos aquellos
amantes del desarrollo de webs que quieren dar el paso hacia las webs
"profesionales".
Los scripts que usamos en estos primeros ejemplos
pueden ser descargados aqu�.
Breve historia de
PHP
PHP es un lenguaje creado por una gran comunidad de
personas. El sistema fue desarrollado originalmente en el a�o 1994 por Rasmus
Lerdorf como un CGI escrito en C que permit�a la interpretaci�n de un n�mero
limitado de comandos. El sistema fue denominado Personal Home Page Tools y
adquiri� relativo �xito gracias a que otras personas pidieron a Rasmus que les
permitiese utilizar sus programas en sus propias p�ginas. Dada la aceptaci�n del
primer PHP y de manera adicional, su creador dise�� un sistema para procesar
formularios al que le atribuy� el nombre de FI (Form Interpreter) y el conjunto
de estas dos herramientas, ser�a la primera versi�n compacta del lenguaje:
PHP/FI.
La siguiente gran contribuci�n al lenguaje se realiz� a mediados del 97
cuando se volvi� a programar el analizador sint�ctico, se incluyeron nuevas
funcionalidades como el soporte a nuevos protocolos de Internet y el soporte a
la gran mayor�a de las bases de datos comerciales. Todas estas mejoras sentaron
las bases de PHP versi�n 3. Actualmente PHP se encuentra en su versi�n 4, que
utiliza el motor Zend, desarrollado con mayor meditaci�n para cubrir las
necesidades actuales y solucionar algunos inconvenientes de la anterior versi�n.
Algunas mejoras de esta nueva versi�n son su rapidez -gracias a que primero se
compila y luego se ejecuta, mientras que antes se ejecutaba mientras se
interpretaba el c�digo-, su mayor independencia del servidor web -creando
versiones de PHP nativas para m�s plataformas- y un API m�s elaborado y con m�s
funciones.
Gr�fica del n�mero de dominios y direcciones IP que utilizan
PHP.
Estad�stica de Netcraft.
En el �ltimo a�o, el n�mero de
servidores que utilizan PHP se ha disparado, logrando situarse cerca de los 5
millones de sitios y 800.000 direcciones IP, lo que le ha convertido a PHP en
una tecnolog�a popular. Esto es debido, entre otras razones, a que PHP es el
complemento ideal para que el t�ndem Linux-Apache sea compatible con la
programaci�n del lado del servidor de sitios web. Gracias a la aceptaci�n que ha
logrado, y los grandes esfuerzos realizados por una creciente comunidad de
colaboradores para implementarlo de la manera m�s �ptima, podemos asegurar que
el lenguaje se convertir� en un est�ndar que compartir� los �xitos augurados al
conjunto de sistemas desarrollados en c�digo abierto.
Tareas principales del
PHP
Poco a poco el PHP se va convirtiendo en un lenguaje que
nos permite hacer de todo. En un principio dise�ado para realizar poco m�s que
un contador y un libro de visitas, PHP ha experimentado en poco tiempo una
verdadera revoluci�n y, a partir de sus funciones, en estos momentos se pueden
realizar una multitud de tareas �tiles para el desarrollo del web:
Funciones de correo electr�nico
Podemos con una facilidad
asombrosa enviar un e-mail a una persona o lista parametrizando toda una serie
de aspectos tales como el e-mail de procedencia, asunto, persona a responder...
Otras funciones menos frecuentes pero de indudable utilidad para
gestionar correos electr�nicos son incluidas en su librer�a.
Gesti�n
de bases de datos
Resulta dif�cil concebir un sitio actual, potente y
rico en contenido que no es gestionado por una base de datos. El lenguaje PHP
ofrece interfaces para el acceso a la mayor�a de las bases de datos comerciales
y por ODBC a todas las bases de datos posibles en sistemas Microsoft, a partir
de las cuales podremos editar el contenido de nuestro sitio con absoluta
sencillez.
Gesti�n de archivos
Crear, borrar, mover,
modificar...cualquier tipo de operaci�n m�s o menos razonable que se nos pueda
ocurrir puede ser realizada a partir de una amplia librer�a de funciones para la
gesti�n de archivos por PHP. Tambi�n podemos transferir archivos por FTP a
partir de sentencias en nuestro c�digo, protocolo para el cual PHP ha previsto
tambi�n gran cantidad de funciones.
Tratamiento de im�genes
Evidentemente resulta mucho m�s sencillo utilizar Photoshop para una el
tratamiento de im�genes pero...�Y si tenemos que tratar miles de im�genes
enviadas por nuestros internautas?
La verdad es que puede resultar muy
tedioso uniformar en tama�o y formato miles de im�genes recibidas d�a tras d�a.
Todo esto puede ser tambi�n automatizado eficazmente mediante PHP.
Tambi�n puede parecer �til el crear botones din�micos, es decir, botones
en los que utilizamos el mismo dise�o y solo cambiamos el texto. Podremos por
ejemplo crear un bot�n haciendo una �nica llamada a una funci�n en la que
introducimos el estilo del bot�n y el texto a introducir obteniendo
autom�ticamente el bot�n deseado.
A partir de la librer�a de funciones
graficas podemos hacer esto y mucho m�s.
Muchas otras funciones pensadas
para Internet (tratamiento de cookies, accesos restringidos, comercio
electr�nico...) o para prop�sito general (funciones matem�ticas,
explotaci�n de cadenas, de fechas, correcci�n ortogr�fica, compresi�n de
archivos...) son realizadas por este lenguaje. A esta inmensa librer�a cabe
ahora a�adir todas las funciones personales que uno va creando por necesidades
propias y que luego son reutilizadas en otros sitios y todas aquellas
intercambiadas u obtenidas en foros o sitios especializados.
Como puede
verse, las posibilidades que se nos presentan son sorprendentemente vastas. Lo
�nico que se necesita es un poco de ganas de aprender y algo de paciencia en
nuestros primeros pasos. El resultado puede ser muy satisfactorio.
Instalaci�n de PHP en nuestro
servidor
Como todo lenguaje de lado servidor, PHP, requiere de
la instalaci�n de un servidor en nuestro PC para poder trabajar en local. Este
modo de trabajo resulta a todas luces m�s pr�ctico que colgar los archivos por
FTP en el servidor y ejecutarlos desde Internet.
As� pues, antes
comenzar a crear nuestros programas en PHP, es necesario:
- Convertir
nuestro ordenador en un servidor. Esto se hace instalando uno de los varios
servidores disponibles para el sistema operativo de nuestra m�quina.
-
Introducir en nuestro servidor los archivos que le permitir�n la comprensi�n del
PHP. Estos archivos pueden ser descargados, en su versi�n m�s actual, de la p�gina oficial de
PHP.
Para conocer la forma de instalar PHP sobre cada servidor
de cada sistema operativo podemos dirigirnos al apartado de documentaci�n de la p�gina
oficial de PHP donde disponemos de un manual en HTML de r�pida consulta
y un enorme manual en PDF de casi 1000 p�ginas traducido al castellano donde
explican minuciosamente y entre otras cosas, los pasos a seguir para cada caso
particular. De todos modos, nosotros vamos a ofrecer algunas ayudas para
configurar PHP en los sistemas m�s habituales.
La elecci�n de vuestro
programa servidor tendr� mucho que ver con el sistema operativo que teng�is
corriendo en vuestro ordenador. Estas ser�an algunas posibilidades de sistemas
opertativos y soluciones que funcionan bien.
Windows 95/98
Si est�is trabajando en Windows 95 o Windows 98 y para desarrolladores
principiantes, podr�a ser recomendable utilizar el servidor Personal Web Ser. En
este caso necesitar�ais:
- Personal Web Server de Microsoft como
servidor el cual os sirve adem�s para el aprendizaje en ASP. Ten�is una gu�a de instalaci�n y
configuraci�n en esta misma web.
- Una instalaci�n autoextraible
de la versi�n m�s reciente de PHP que, adem�s de tardar menos en descargarse, os
guiar� paso a paso en el proceso de instalaci�n. Esta versi�n no incluye todas
las funcionalidades de PHP, pero os servir� para aprender hasta un buen nivel.
Hay que se�alar que, para el caso de PHP en PWS, adem�s de todo lo dicho
en cap�tulo de instalaci�n, es importante al crear el directorio virtual
permitir la ejecuci�n de scripts validando la caja correspondiente.
En
Windows 95/98 tambi�n podremos utilizar el servidor Apache y puede que sea una
opci�n todav�a m�s completa que la de utilizar PWS. A continuaci�n explicamos
m�s sobre ello.
Windows ME y XP Home edition
No hemos
probado PHP en estas plataformas, pero en principio no tienen compatibilidad con
Personal Web Server, por lo que deber�amos decantarnos por otro servidor.
Otra posibilidad para los usuarios de Windows en general es instalar Apache
como servidor web lo cual puede resultar ventajoso con respecto al uso del PWS
ya que PHP est� principalmente dise�ado para correr en este servidor. Esto
quiere decir que, aunque en principio todo deber�a funcionar correctamente sobre
ambos servidores, es posible que alg�n bug no corregido haga fallar uno de
nuestros scripts si trabajamos para con un servidor cuyas actualizaciones son
menos frecuentes y detalladas.
Apache ha sido especialmente pensado para
plataformas Unix-Linux, aunque recientemente, con la Apache 2.0, han
desarrollado una versi�n espec�fica para Windows.
Disponemos de un
art�culo para aprender a configurar PHP sobre
Apache en Windows, como CGI y tambi�n como m�dulo de Apache.
Windows NT, Windows 2000 y XP en sus versiones Profesional y
Server
Para estos sistemas tenemos dos posibilidades muy
interesantes, ya que podremos instalar PHP sobre Internet
Information Server o sobre Apache con
todas las garant�as. Si hubiese que recomendar una de las dos opciones, nos
decantar�amos por Apache debido a que, como dec�amos, PHP est� pensado para
trabajar sobre Apache. Podr�a ser interesante IIS en el caso de que deseemos
correr ASP y PHP sobre el mismo servidor, ya que, en principio, Apache no es
compatible con ASP.
Unix - Linux
Hay que decir, no
obstante, que las mejores prestaciones de este lenguaje son obtenidas trabajando
en entorno Unix o Linux y con un servidor Apache, la combinaci�n m�s corriente
en la mayor�a de los servidores de Internet que trabajan con PHP.
Conclusi�n
En cualquier caso, para
fines de desarrollo en local, podemos contentarnos en un principio de trabajar
con cualquier sistema. Solamente en casos de programaci�n realmente avanzada
podremos confrontarnos con problemas relacionados con el sistema operativo
utilizado o el servidor en el que hacemos correr nuestras p�ginas. Hay que
pensar tambi�n que, en casos puntuales para los que nuestro PC pueda quedarse
corto, podemos hacer directamente nuestras pruebas en el servidor donde alojamos
nuestro sitio el cual ser� muy probablemente, como hemos dicho, un Unix o Linux
funcionando con Apache.
Configuraci�n
de PHP con Apache en Windows, como CGI
El presente art�culo
trata de c�mo configurar PHP y Apache para que trabajen conjuntamente en
un sistema Windows. Adem�s, este articulo asume que hay un servidor
Apache configurado en el Windows, y que funciona correctamente.
| Referencia: Si deseamos conocer las distintas
posibilidades para la instalaci�n de PHP en los distintos sistemas
operativos y servidores, puede ser de utilidad la lectura del art�culo Instalaci�n
de PHP en nuestro servidor. |
Existen dos formas
de configurar PHP para trabajar con Apache, instalar como un m�dulo o instalar
como un CGI. En este art�culo vamos a ver c�mo instalarlo com CGI, aunque
disponemos de otro art�culo para instalar PHP como m�dulo
en Apache.
Para instalar PHP como un CGI hay que seguir los
siguientes pasos:
En primer lugar, hay que descargarse PHP desde la
p�gina de php.net. Existen dos versiones, una que tiene un instalador, y otra
que es un fichero ZIP. Hay que descargarse esta �ltima.
Una vez
descargado, hay que descomprimirlo dentro de una carpeta, esta no tiene que
estar bajo el �rbol de directorios de Apache. El art�culo asumir� que se
descomprime dentro de la carpeta C:\PHP. Comprobar que los contenidos del
archivo ZIP no quedan en un subdirectorio de la carptea C:\PHP, sino
directamente en dicha carpeta.
Dentro de la carpeta c:\PHP se encuentra
un fichero llamado PHP4ts.dll, hay que mover el fichero dentro de la carpeta:
c:\windows\system � c:\winnt\system
A continuaci�n, dentro de la carpeta
c:\php se encuentra un fichero llamado php.ini-recomended. Hay que copiar este
fichero dentro de la carpeta c:\Windows, y renombrarlo a php.ini.
En
este fichero se encuentra toda la configuraci�n de PHP, y las modificaciones en
la configuraci�n de PHP (mostrar Errores, variables globales etc...) se
encuentra dentro del mismo.
Es muy recomendable cambiar la directiva
display_errors que por defecto esta en OFF, y pornerla en ON, para poder ver los
errores que se producen en las p�ginas durante el desarrollo. Para un servidor
en producci�n en conveniente dejarla en OFF.
Una vez se han hecho estos
cambios, queda indicarle al Apache, donde se encuentra instalado el PHP, para
ello hay que editar el fichero httpd.conf que se encuentra dentro de la carpeta
conf, en la carpeta de instalaci�n del apache (por defecto c:\archivos de
programa\apache group\apache2\conf)
Abrir el fichero, y situarse al
final del mismo, y escribir las siguientes l�neas:
ScriptAlias /php/
"c:/php/"
AddType application/x-httpd-php .php
Action
application/x-httpd-php "/php/php.exe"
En ellas se indica donde se
encuentra el ejecutable de php, y lo asocia a los ficheros .php que se
encuentren dentro de apache.
A continuaci�n reiniciar el servidor
Apache, y ya esta!
Por �ltimo, indicar que para probar la nueva
instalaci�n, es recomendable crear un fichero php con el siguiente contenido:
<? phpinfo();?>
Luego lo guardamosdentro de la carpeta
ra�z de documentos del Apache (por defecto c:\archivos de programa\apache
group\apache2\htdocs ), con un nombre terminado en .php, por ejemplo info.php
Para ejecutarlo, a trav�s de un navegador, escribir la direcci�n
http://localhost/info.php.
Deber�a aparecer una pantalla como la que se
muestra a continuaci�n.
Si la vemos correctamente es que todo ha ido bien y que tenemos perfectamente
instalado PHP en nuestro servidor Apache.
| Nota: Este tipo de instalaci�n de PHP sobre Apache
es poco recomendada por motivos de seguridad. Podemos seguirla para
configurar PHP en local, con intenci�n de desarrollar nuestras p�ginas
web, pero nunca si vamos a utilizar el servidor en un entorno de
producci�n, es decir, en un servidor que se encuentre permanentemente
conectado a Internet sirviendo p�ginas a todo tipo de usuarios.
Ser�a necesario instalar PHP como
un m�dulo de Apache, en lugar de CGI, para dotar al sistema de una
mayor seguridad, y tambi�n m�s potencia.
|
Configuraci�n de PHP como modulo de Apache en
Windows
En este art�culo vamos a explicar c�mo instalar PHP
como m�dulo de Apache 2.0 en un sistema Windows. Para las pruebas hemos
utilizado Windows XP, pero seguro que con otros sistemas el proceso ser� muy
parecido, aunque, en todo caso, indicaremos las diferencias documentadas en el
sitio de PHP.
Anteriormente hab�amos explicado la instalaci�n de PHP como
un CGI, aunque en la p�gina de PHP desaconsejan esta opci�n, puesto que
adolece de grabes problemas de seguridad. Adem�s, PHP instalado como m�dulo de
Apache resulta mucho m�s r�pido que como CGI.
Descargar y
descomprimir PHP
El primer paso consiste en descargar la �ltima
versi�n de PHP. Podremos hacerlo desde la p�gina oficial de PHP, en la secci�n
de descargas. http://www.php.net/downloads.php Debemos elegir la versi�n "zip
package" que contiene todas las funcionalidades de PHP y el m�dulo necesario
para instalarlo en Apache.
Una vez descargado el paquete comprimido en
.zip de PHP necesitamos descomprimirlo en nuestro disco duro. Podemos utilizar
el directorio ra�z del disco duro para descomprimir los archivos. En ese caso,
se crear� un directorio llamado algo como "php-4.3.1-Win32" que colgar� de
nuestro directorio ra�z. Se recomienda cambiar el nombre del directorio creado a
algo como "c:\php". En todo caso, nos advierten en la p�gina de PHP sobre no
colocar ning�n nombre de directorio que contenga espacios, pues alg�n servidor
web puede dar problemas. Por ejemplo, cuidado con instalar PHP en un directorio
como este "c:\archivos de programa\php", pues en la ruta tenemos directorios con
espacios.
Copia de las DLL
A continuaci�n nos informan
sobre la necesidad de copiar en nuestro directorio de sistema una serie de
librer�as (.dll), que encontraremos en el directorio sapi de nuestra instalaci�n
de PHP, supuestamente algo como "c:\php\sapi",
El mencionado directorio
de sistema puede variar de unas versiones a otras de Windows. En Windows XP, el
directorio de sistema donde debemos copiar las dll, es "C:\WINDOWS\system32". En
Windows 9x/ME, el directorio ser�a "C:\Windows\System" y en Windows NT/2000
ser�a el directorio "C:\WINNT\System32" o bien, "C:\WINNT40\System32".
| Nota: no se deben mezclar las DLL de diversas
versiones de PHP, porque de lo contrario, podr�a causarnos problemas.
|
Definir un archivo php.ini
Otro
archivo que debemos copiar, esta vez en nuestro directorio Windows, es el
php.ini, que guarda las opciones de configuraci�n definidas para PHP. En la
distribuci�n de PHP se incluyen dos archivos php.ini que podemos utilizar
directamente en nuestro sistema. Estos dos archivos se llaman "php.ini-dist" y
"php.ini-recommended" y contienen unas opciones t�picas de configuraci�n de PHP.
Se recomienda utilizar "php.ini-recommended", porque viene optimizado para
obtener los mejores niveles de seguridad. En cualquier caso, podemos editar en
cualquier momento el contenido del archivo para modificar la configuraci�n de
PHP a nuestro gusto o necesidades.
Para definir el php.ini debemos hacer
una copia del archivo de configuraci�n escogido ("php.ini-dist" o
"php.ini-recommended") y renombrarlo como el "php.ini". Posteriormente debemos
copiarlo en nuestra carpeta Windows, que en sistemas 9x/ME/XP es "c:\windows" y
en sistemas NT/2000 suele ser "c:\WINNT", o bien "c:\WINNT40".
Editar
httpd.conf
Posteriormente deberemos editar nuestro archivo de
configuraci�n de Apache, llamado "httpd.conf" que est� en el directorio "conf"
de nuestra instalaci�n de Apache. Tambi�n podemos encontrar un acceso directo
para editar este archivo accediendo a Inicio - Programas - Apache HTTP Server -
Configure Apache HTTP Server - Edit httpd.conf configuration file.
Debemos a�adir un par de l�neas de configuraci�n del m�dulo de Apache.
LoadModule php4_module C:\php\sapi\php4apache2.dll
AddType application/x-httpd-php .php
El lugar adecuado para
a�adir esas l�neas es en el bloque de carga de m�dulos, que podemos encontrar si
buscamos por el texto "LoadModule". Podemos a�adir las l�neas de carga del
m�dulo PHP despu�s de la carga de los otros m�dulos que vienen ya configurados
en archivo httpd.conf de Apache.
Si no instalamos PHP en el directorio
c:\php, debemos editar las l�neas a colocar en el httpd.conf para colocar la
ruta correcta al directorio donde est� la librer�a php4apache2.dll.
Un �ltimo paso
Antes de acabar y probar si PHP se ha
instalado correctamente, necesitamos copiar una dll en el directorio sapi.
Concretamente, la dll "php4ts.dll", que podemos encontrar en nuestro directorio
de instalaci�n de PHP es la que debemos copiar al directorio sapi, algo como
"c:\php\sapi".
Nota: Esta acci�n no viene documentada en el
manual de PHP, aunque s� no la llevamos a cabo no funcionar�.
El
error que obtenemos al tratar de arrancar el Apache es algo como:
Syntax error on line 173 of C:/Archivos de programa/Apache
Group/Apache2/conf/httpd.conf: Cannot load
C:/php/sapi/php4apache2.dll into server: No se puede encontrar el m�dulo
especificado. |
Otra configuraci�n que
podemos aplicar al archivo httpd.conf es definir tambi�n como documento por
defecto el archivo index.php en nuestro servidor Apache. El documento por
defecto es generalmente index.html, pero lo habitual si vamos a programar con
PHP es que tambi�n necesitemos definir index.php como documento a mostrar si no
se indica otro documento del directorio al que se est� accediendo.
El
documento por defecto se define con la variable DirectoryIndex. Nos quedar� una
deninici�n como esta:
DirectoryIndex index.html
index.html.var index.php
Probar si PHP est� funcionando
correctamente
Para terminar, podemos crear una p�gina de prueba de
PHP, que colocaremos en nuestro directorio de publicaci�n de Apache,
generalmente llamado htdocs, que se aloja dentro del directorio donde se ha
instalado Apache, algo como "C:\Archivos de programa\Apache
Group\Apache2\htdocs"
Podemos crear un archivo llamado, por ejemplo,
"prueba.php", en el que colocaremos dentro el siguiente c�digo:
<?
phpinfo()
?>
Esta funci�n
simplemente crear� una p�gina de muestra de las configuraciones definidas para
PHP en ese servidor.
Para acceder al archivo creado desde nuestro
explorador, escribiremos en la barra de direcciones esta URL:
http://localhost/prueba.php
Deber�a aparecer un resultado como
el de la siguiente imagen.
Instalaci�n de MySQL en
Windows
Uno de los puntos fuertes de las p�ginas en PHP es la
posibilidad de explotar bases de datos mediante funciones de una simplicidad y
potencia muy agradecidas. Estas bases de datos pueden servir a nuestro sitio
para almacenar contenidos de una forma sistem�tica que nos permita
clasificarlos, buscarlos y editarlos r�pida y f�cilmente.
Una base de
datos es sencillamente un conjunto de tablas en las que almacenamos distintos
registros (art�culos de una tienda virtual, proveedores o clientes de una
empresa, pel�culas en cartelera en el cine...). Estos registros son catalogados
en funci�n de distintos par�metros que los caracterizan y que presentan una
utilidad a la hora de clasificarlos. As�, por ejemplo, los art�culos de una
tienda virtual podr�an catalogarse a partir de distintos campos como puede ser
un n�mero de referencia, nombre del art�culo, descripci�n, precio, proveedor...
La base de datos m�s difundida con el tandem UNIX-Apache es sin duda
MySQL. Como para el caso de Apache, una versi�n para Windows est� disponible y
puede ser descargada gratis.
Su puesta a punto no entra�a
mucha dificultad. Una vez instalado el programa podemos ejecutar nuestras
ordenes en modo MS-DOS. Para ello abrimos una ventana MS-DOS y nos colocamos en
el directorio bin de mysql. En este directorio se encuentran los
archivos ejecutables. Aqu� habr� que encontrar un archivo llamado mysqld.
En el caso de la versi�n m�s actual durante la redacci�n de este articulo este
archivo es llamado mysqld-shareware. Una vez ejecutado este archivo podemos
ejecutar el siguiente: mysql.
Llegados a este punto veremos c�mo
un mensaje de bienvenida aparece en nuestra pantalla. En estos momentos nos
encontramos dentro de la base de datos. A partir de ah� podemos realizar todo
tipo de operaciones por sentencias SQL.
No vamos a entrar en una
explicaci�n pormenorizada del funcionamiento de esta base de datos ya que esto
nos dar�a para un manual entero. Daremos como referencia nuestro tutorial de
SQL a partir del cual se puede tener una idea muy pr�ctica de las
sentencias necesarias para la creaci�n y
edici�n de las tablas. Tambi�n existe una documentaci�n extensa en ingl�s en el
directorio Docs de MySQL. A modo de resumen, aqu� os proponemos adem�s
las operaciones m�s b�sicas que, combinadas nuestro tutorial de
SQL pueden dar soluci�n a gran parte de los casos que se os
presenten:
| Instrucci�n |
Descripci�n |
| Show databases; |
Muestra el conjunto de bases de datos presentes en el servidor |
| Use nombre_de_la_base |
Determina la base de datos sobre la que vamos a trabajar |
| Create Database nombre_de_la_base; |
Crea una nueva bd con el nombre especificado |
| Drop Database nombre_de_la_base; |
Elimina la base de datos del nombre especificado |
| Show tables; |
Muestra las tablas presentes en la base de datos actual |
| Describe nombre_de_la_tabla; |
Describe los campos que componen la tabla |
| Drop Table nombre_de_la_tabla; |
Borra la tabla de la base de datos |
| Load Data Local Infile "archivo.txt" Into Table
nombre_de_la_tabla; |
Crea los registros de la tabla a partir de un fichero de texto en el
que separamos por tabulaciones todos los campos de un mismo
registro. |
| Quit |
Salir de MySQL |
Para evitarnos el tener que
editar nuestras tablas directamente sobre archivos de texto, puede resultar muy
pr�ctico usar cualquier otra base de datos con un editor y exportar a
continuaci�n la tabla en un archivo de texto configurado para dejar tabulaciones
entre cada campo. Esto es posible en Access por ejemplo pinchando con el bot�n
derecho sobre la tabla que queremos convertir y eligiendo la opci�n exportar.
Una ventana de dialogo aparecer� en la que elegiremos guardar el archivo en tipo
texto. El paso siguiente ser� elegir un formato delimitado por tabulaciones sin
cualificador de texto.
Otra posibilidad que puede resultar muy pr�ctica
y que nos evita trabajar continuamente tecleando �rdenes al estilo de anta�o es
servirse de programas en PHP o Perl ya existentes y descargables en la red. El
m�s popular sin duda es phpMyAdmin. Este tipo de scripts son ejecutados desde
un navegador y pueden ser por tanto albergados en nuestro servidor o empleados
en local para, a partir de ellos, administrar MySQL de una forma menos sufrida.
Asimismo, dentro del directorio bin de MySQL, podemos encontrar una
peque�a aplicaci�n llamada MySqlManager. Se trata de una interface windows, m�s
agradable a la vista y al uso que la que obtenemos ejecutando el archivo
mysql. En este caso, las sentencias SQL deben realizarse sin el punto y
coma final.
Introducci�n a la sintaxis
PHP
PHP se escribe dentro de la propia p�gina web, junto con
el c�digo HTML y, como para cualquier otro tipo de lenguaje incluido en un
c�digo HTML, en PHP necesitamos especificar cu�les son las partes constitutivas
del c�digo escritas en este lenguaje. Esto se hace, como en otros casos,
delimitando nuestro c�digo por etiquetas. Podemos utilizar distintos modelos de
etiquetas en funci�n de nuestras preferencias y costumbres. Hay que tener sin
embargo en cuenta que no necesariamente todas est�n configuradas inicialmente y
que otras, como es el caso de <% y %>s�lo est�n disponibles a partir de una
determinada versi�n (3.0.4.).
Estos modos de abrir y cerrar las
etiquetas son:
<? y ?> <% y %> <?php
y ?> <script
languaje="php"> |
Este ultimo modo est�
principalmente aconsejado a aquellos que tengan el valor de trabajar con Front
Page ya que, usando cualquier otro tipo de etiqueta, corremos el riesgo de que
la aplicaci�n nos la borre sin m�s debido a que se trata de un c�digo
incomprensible para ella.
El modo de funcionamiento de una p�gina PHP, a
grandes rasgos, no difiere del cl�sico para una p�gina din�mica de lado
servidor: El servidor va a reconocer la extensi�n correspondiente a la p�gina
PHP (phtml, php, php4,...) y antes de enviarla al navegador va a encargarse de
interpretar y ejecutar todo aquello que se encuentre entre las etiquetas
correspondientes al lenguaje PHP. El resto, lo enviara sin m�s ya que, asumir�
que se trata de c�digo HTML absolutamente comprensible por el navegador.
Otra caracter�stica general de los scripts en PHP es la forma de separar
las distintas instrucciones. Para hacerlo, hay que acabar cada instrucci�n con
un punto y coma ";". Para la ultima expresi�n, la que va antes del cierre de
etiqueta, este formalismo no es necesario.
Incluimos tambi�n en este
capitulo la sintaxis de comentarios. Un comentario, para aquellos que no lo
sepan, es una frase o palabra que nosotros incluimos en el c�digo para
comprenderlo m�s f�cilmente al volverlo a leer un tiempo despu�s y que, por
supuesto, el ordenador tiene que ignorar ya que no va dirigido a �l sino a
nosotros mismos. Los comentarios tienen una gran utilidad ya que es muy f�cil
olvidarse del funcionamiento de un script programado un tiempo atr�s y resulta
muy �til si queremos hacer r�pidamente comprensible nuestro c�digo a otra
persona.
Pues bien, la forma de incluir estos comentarios es variable
dependiendo si queremos escribir una l�nea o m�s. Veamos esto con un primer
ejemplo de script:
<? $mensaje="Tengo hambre!!"; //Comentario de una linea echo
$mensaje; #Este comentario tambi�n es de una linea /*En este caso mi
comentario ocupa varias lineas, lo ves? */ ?>
|
Si usamos doble barra (//)
o el s�mbolo # podemos introducir comentarios de una l�nea. Mediante /* y */
creamos comentarios multil�nea. Por supuesto, nada nos impide de usar estos
�ltimos en una sola l�nea.
No os preocup�is si no comprend�is el texto
entre las etiquetas, todo llegar�. Os adelantamos que las variables en PHP se
definen anteponiendo un s�mbolo de d�lar ($) y que la instrucci�n echo
sirve para sacar en pantalla lo que hay escrito a continuaci�n.
Recordamos que todo el texto insertado en forma de comentario es
completamente ignorado por el servidor. Resulta importante acostumbrarse a dejar
comentarios, es algo que se agradece con el tiempo.
Variables en PHP
En el manual de
p�ginas din�micas hemos introducido el concepto de
variable. En el cap�tulo anterior coment�bamos que, para PHP, las
variables eran definidas anteponiendo el s�mbolo d�lar ($) al nombre de la
variable que est�bamos definiendo.
Dependiendo de la informaci�n que
contenga, una variable puede ser considerada de uno u otro tipo:
Variables num�ricas Almacenan
cifras |
| Enteros |
$entero=2002; |
Numeros sin decimales |
| Real |
$real=3.14159; |
Numeros con o sin decimal |
Variables alfanum�ricas Almacenan
textos compuestos de n�meros y/o cifras |
| Cadenas |
Almacenan variables alfanum�ricas |
$cadena="Hola amigo"; |
Tablas Almacenan series de
informaciones num�ricas y/o alfanum�ricas |
| Arrays |
Son las variables que guardan las tablas |
$sentido[1]="ver"; $sentido[2]="tocar"; $sentido[3]="oir"; $sentido[4]="gusto"; $sentido[5]="oler"; |
Objetos Se trata de conjuntos de
variables y funciones asociadas. Presentan una complejidad mayor que las
variables vistas hasta ahora pero su utilidad es m�s que
interesante. |
A diferencia de otros lenguajes,
PHP posee una gran flexibilidad a la hora de operar con variables. En efecto,
cuando definimos una variable asign�ndole un valor, el ordenador le atribuye un
tipo. Si por ejemplo definimos una variable entre comillas, la variable ser�
considerada de tipo cadena:
| $variable="5"; //esto es una cadena |
Sin
embargo si pedimos en nuestro script realizar una operaci�n matem�tica con esta
variable, no obtendremos un mensaje de error sino que la variable cadena ser�
asimilada a num�rica:
<? $cadena="5"; //esto es una cadena $entero=3; //esto es un
entero echo $cadena+$entero ?> |
Este script dar� como
resultado "8". La variable cadena ha sido asimilada en entero (aunque su tipo
sigue siendo cadena) para poder realizar la operaci�n matem�tica. Del mismo
modo, podemos operar entre variables tipo entero y real. No debemos preocuparnos
de nada, PHP se encarga durante la ejecuci�n de interpretar el tipo de variable
necesario para el buen funcionamiento del programa.
Sin embargo, en
contraste, hay que tener cuidado en no cambiar may�sculas por min�sculas ya que,
en este sentido, PHP es sensible. Conviene por lo tanto trabajar ya sea siempre
en may�sculas o siempre en min�sculas para evitar este tipo de malentendidos a
veces muy dif�ciles de localizar.
Variables asignadas por
referencia
En PHP tambi�n podemos asignar variables por referencia.
En ese caso no se les asigna un valor, sino otra variable, de tal modo que las
dos varialbles comparten espacio en memoria para el mismo dato.
La
notaci�n para asignar por referencia es colocar un "&" antes del nombre de
la variable.
<?php
$foo = 'Bob'; // Asigna el
valor 'Bob' a $foo
$bar = &$foo; // Referencia $foo v�a $bar.
$bar =
"Mi nombre es $bar"; // Modifica $bar...
echo $foo; // $foo tambi�n se
modifica.
echo $bar;
?>
Esto dar� como resultado la
visualizaci�n dos veces del string "Mi nombre es Bob". Algo como:
Mi
nombre es BobMi nombre es Bob
Cambio del
tipo de las variables en PHP
PHP no requiere que indiquemos el
tipo que va a contener una variable, sino que lo deduce del valor que asignemos
a la variable. Asimismo, se encarga de actualizar autom�ticamente el tipo de la
variable cada vez que le asignamos un nuevo valor.
Por ello, para
cambiar el tipo de una variable simplemente le asignamos un valor con un nuevo
tipo.
Nota: Se excluyen en este caso el cambio de variables a tipo Array
porque la sintaxis puede resultar ambigua al expresar ese c�digo, es decir,
puede darse el caso de que una l�nea de c�digo pueda significar dos cosas.
$a = "1";
//$a es una cadena
$a[0] = "f";
//�Estamos
editando el �ndice de la cadena o forzando a array?
Forzado
En cualquier caso, podemos forzar una variable para que cambie de tipo
con la funci�n setType().
setType($variable,"nuevo_tipo");
la funci�n setType()
actualiza el tipo de $variable a "nuevo_tipo" y devuelve un boleano indicando si
hubo �xito o no en la conversi�n.
Entre "nuevo_tipo" tenemos:
� "integer"
� "double"
�
"string"
� "array"
� "object"
Tambi�n podemos hacer que una
variable se comporte como un tipo determinado forz�ndola, de la misma manera a
como se hace en el lenguaje C.
$variable = "23";
$variable = (int) $variable;
Los forzados permitidos son:
� (int), (integer) - fuerza a entero
(integer)
� (real), (double), (float) - fuerza a doble (double)
� (string)
- fuerza a cadena (string)
� (array) - fuerza a array (array)
(object) -
fuerza a objeto (object)
Variables
de sistema en PHP
Dada su naturaleza de lenguaje de lado
servidor, PHP es capaz de darnos acceso a toda una serie de variables que nos
informan sobre nuestro servidor y sobre el cliente. La informaci�n de estas
variables es atribuida por el servidor y en ning�n caso nos es posible modificar
sus valores directamente mediante el script. Para hacerlo es necesario influir
directamente sobre la propiedad que definen.
Existen multitud de
variables de este tipo, algunas sin utilidad aparente y otras realmente
interesantes y con una aplicaci�n directa para nuestro sitio web. Aqu� os
enumeramos algunas de estas variables y la informaci�n que nos aportan:
| Variable |
Descripci�n |
| $HTTP_USER_AGENT |
Nos informa principalmente sobre el sistema operativo y tipo y versi�n
de navegador utilizado por el internauta. Su principal utilidad radica en
que, a partir de esta informaci�n, podemos redireccionar nuestros usuarios
hacia p�ginas optimizadas para su navegador o realizar cualquier otro tipo
de acci�n en el contexto de un navegador determinado. |
| $HTTP_ACCEPT_LANGUAGE |
Nos devuelve la o las abreviaciones de la lengua considerada como
principal por el navegador. Esta lengua o lenguas principales pueden ser
elegidas en el men� de opciones del navegador. Esta variable resulta
tambi�n extremadamente �til para enviar al internauta a las p�ginas
escritas en su lengua, si es que existen. |
| $HTTP_REFERER |
Nos indica la URL desde la cual el internauta ha tenido acceso a la
p�gina. Muy interesante para generar botones de "Atr�s" din�micos o para
crear nuestros propios sistemas de estad�sticas de visitas. |
| $PHP_SELF |
Nos devuelve una cadena con la URL del script que est� siendo
ejecutado. Muy interesante para crear botones para recargar la
p�gina. |
| $HTTP_GET_VARS |
Se trata de un array que almacena los nombres y contenidos de las
variables enviadas al script por URL o por formularios GET |
| $HTTP_POST_VARS |
Se trata de un array que almacena los nombres y contenidos de las
variables enviadas al script por medio de un formulario POST |
| $HTTP_COOKIES_VARS |
Se trata de un array que almacena los nombres y contenidos de las
cookies. Veremos qu� son m�s adelante. |
| $PHP_AUTH_USER |
Almacena la variable usuario cuando se efect�a la entrada a p�ginas de
acceso restringido. Combinado con $PHP_AUTH_PW resulta ideal para
controlar el acceso a las p�ginas internas del sitio. |
| $PHP_AUTH_PW |
Almacena la variable password cuando se efect�a la entrada a p�ginas
de acceso restringido. Combinado con $PHP_AUTH_USER resulta ideal para
controlar el acceso a las p�ginas internas del sitio. |
| $REMOTE_ADDR |
Muestra la direcci�n IP del visitante. |
| $DOCUMENT_ROOT |
Nos devuelve el path f�sico en el que se encuentra alojada la p�gina
en el servidor. |
| $PHPSESSID |
Guarda el identificador de sesi�n del usuario. Veremos m�s adelante en
qu� consisten las sesiones. |
No todas estas
variables est�n disponibles en la totalidad de servidores o en determinadas
versiones de un mismo servidor. adem�s, algunas de ellas han de ser previamente
activadas o definidas por medio de alg�n acontecimiento. As�, por ejemplo, la
variable $HTTP_REFERER no estar� definida a menos que el internauta acceda al
script a partir de un enlace desde otra p�gina.
Variables
superglobales
A partir de PHP 4.1.0, se dispone de un conjunto de
varibles de tipo array que mantienen informaci�n del sistema, llamadas
superglobales porque se definen autom�ticamente en un �mbito global.
Estas variables hacen referencia a las mismas que se acced�an antes por
medio de los arrays del tipo $HTTP_*_VARS. �stas todav�a existen, aunque a
partir de PHP 5.0.0 se pueden desactivar con la directiva register_long_arrays.
La lista de estas variables, extra�da directamente de la documentaci�n
de PHP es la siguiente:
$GLOBALS
Contiene una referencia a
cada variable disponible en el espectro de las variables del script. Las llaves
de esta matriz son los nombres de las variables globales. $GLOBALS existe dese
PHP 3.
$_SERVER
Variables definidas por el servidor web �
directamente relacionadas con el entorno en don el script se esta ejecutando.
An�loga a la antigua matriz $HTTP_SERVER_VARS (la cual est� todav�a disponible,
aunque no se use).
$_GET
Variables proporcionadas al script
por medio de HTTP GET. An�loga a la antigua matriz $HTTP_GET_VARS (la cual est�
todav�a disponible, aunque no se use).
$_POST
Variables
proporcionadas al script por medio de HTTP POST. An�loga a la antigua matriz
$HTTP_POST_VARS (la cual est� todav�a disponible, aunque no se use).
$_COOKIE
Variables proporcionadas al script por medio de HTTP
cookies. An�loga a la antigua matriz $HTTP_COOKIE_VARS (la cual est� todav�a
disponible, aunque no se use).
$_FILES
Variables
proporcionadas al script por medio de la subida de ficheros via HTTP . An�loga a
la antigua matriz $HTTP_POST_FILES (la cual est� todav�a disponible, aunque no
se use). Vea tambi�n Subiendo ficheros por m�todo POST para m�s informaci�n.
$_ENV
Variables proporcionadas al script por medio del
entorno. An�loga a la antigua matriz $HTTP_ENV_VARS (la cual est� todav�a
disponible, aunque no se use).
$_REQUEST
Variables
proporcionadas al script por medio de cuaquier mecanismo de entrada del usuario
y por lo tanto no se puede confiar en ellas. La presencia y el orden en que
aparecen las variables en esta matriz es definido por la directiva de
configuraci�n variables_order. Esta matriz no tiene un an�logo en versiones
anteriores a PHP 4.1.0. Vea tambi�n import_request_variables().
$_SESSION
Variables registradas en la sesi�n del script.
An�loga a la antigua matriz $HTTP_SESSION_VARS (la cual est� todav�a disponible,
aunque no se use). Vea tambi�n la secci�n Funciones para el manejo de sessiones
para m�s informaci�n.
Tablas o Arrays
en PHP
Un tipo de variable que ya hemos descrito pero puede
ser relativamente complicado a asimilar con respecto a la mayor�a son los
arrays. Un array es una variable que est� compuesta de varios elementos cada uno
de ellos catalogado dentro de ella misma por medio de una clave.
En el
cap�tulos anteriores pon�amos el ejemplo de un array llamado sentido que
conten�a los distintos sentidos del ser humano:
$sentido[1]="ver"; $sentido[2]="tocar"; $sentido[3]="oir"; $sentido[4]="gustar"; $sentido[5]="oler";
|
En este caso este array cataloga sus
elementos, comunmente llamados valores, por n�meros. Los n�meros del 1 al 5 son
por lo tanto las claves y los sentidos son los valores asociados. Nada nos
impide emplear nombres (cadenas) para clasificarlos. Lo �nico que deberemos
hacer es entrecomillarlos:
<? $moneda["espana"]="Peseta"; $moneda["francia"]="Franco"; $moneda["usa"]="Dolar"; ?>
|
Otra forma de definir id�nticamente este mismo
array y que nos puede ayudar para la creaci�n de arrays m�s complejos es la
siguiente sintaxis:
<? $moneda=array("espana"=> "Peseta","francia" =>
"Franco","usa" => "Dolar"); ?> |
Una
forma muy practica de almacenar datos es mediante la creaci�n de arrays
multidimensionales (tablas). Pongamos el ejemplo siguiente: Queremos almacenar
dentro de una misma tabla el nombre, moneda y lengua hablada en cada pa�s. Para
hacerlo podemos emplear un array llamado pa�s que vendr� definido por estas tres
caracter�sticas (claves). Para crearlo, deber�amos escribir una expresi�n del
mismo tipo que la vista anteriormente en la que meteremos una array dentro del
otro. Este proceso de incluir una instruccion dentro de otra se llama anidar y
es muy corriente en programaci�n:
<? $pais=array ( "espana"
=>array ( "nombre"=>"Espa�a", "lengua"=>"Castellano", "moneda"=>"Peseta" ), "francia"
=>array ( "nombre"=>"Francia", "lengua"=>"Franc�s", "moneda"=>"Franco" ) ); echo
$pais["espana"]["moneda"] //Saca en pantalla: "Peseta" ?>
|
Antes de entrar en el
detalle de este peque�o script, comentemos algunos puntos referentes a la
sintaxis. Como puede verse, en esta secuencia de script, no hemos introducido
punto y coma ";" al final de cada l�nea. Esto es simplemente debido a que lo que
hemos escrito puede ser considerado como una sola instrucci�n. En realidad,
somos nosotros quienes decidimos cortarla en varias l�neas para, as�, facilitar
su lectura. La verdadera instrucci�n acabar�a una vez definido completamente el
array y es precisamente ah� donde hemos colocado el �nico punto y coma. Por otra
parte, pod�is observar c�mo hemos jugado con el tabulador para separar unas
l�neas m�s que otras del principio. Esto tambi�n lo hacemos por cuestiones de
claridad, ya que nos permite ver qu� partes del c�digo est�n incluidas dentro de
otras. Es importante acostumbrarse a escribir de esta forma del mismo modo que a
introducir los comentarios ya que la claridad de los scripts es fundamental a la
hora de depurarlos. Un poco de esfuerzo a la hora de crearlos puede ahorrarnos
muchas horas a la hora de corregirlos o modificarlos meses m�s tarde.
Pasando ya al comentario del programa, como pod�is ver, �ste nos permite
almacenar tablas y, a partir de una simple petici�n, visualizarlas un
determinado valor en pantalla.
Lo que es interesante es que la utilidad
de los arrays no acaba aqu�, sino que tambi�n podemos utilizar toda una serie de
funciones creadas para ordenarlos por orden alfab�tico directo o inverso, por
claves, contar el numero de elementos que componen el array adem�s de poder
movernos por dentro de �l hacia delante o atr�s.
Muchas son las funciones
propuestas por PHP para el tratamiento de arrays, no vamos a entrar aqu� en una
descripci�n de las mismas. S�lo incluiremos esta peque�a tabla que puede ser
complementada, si necesario, con la documentaci�n que ya hemos mencionado.
| Funci�n |
Descripci�n |
| array_values (mi_array) |
Lista los valores contenidos en mi_array |
| asort(mi_array) y arsort(mi_array) |
Ordena por orden alfab�tico directo o inverso en funci�n de los
valores |
| count(mi_array) |
Nos da el numero de elementos de nuestro array |
| ksort(mi_array) y krsort(mi_array) |
Ordena por orden alfab�tico directo o inverso en funci�n de las
claves |
| list ($variable1, $variable2...)=mi_array |
Asigna cada una variable a cada uno de los valores del array |
| next(mi_array), prev(mi_array), reset(mi_array) y
end(mi_array) |
Nos permiten movernos por dentro del array con un puntero hacia
delante, atras y al principio y al final. |
| each(mi_array) |
Nos da el valor y la clave del elemento en el que nos encontramos y
mueve al puntero al siguiente elemento. |
De gran
utilidad es tambi�n el bucle foreach
que recorre de forma secuencial el array de principio a fin.
Trabajo con tablas o arrays en
PHP
Vamos a ver varios ejemplos de trabajo con arrays
(arreglos, vectores, matrices o tablas en castellano) en PHP que ilustrar�n un
poco el funcionamiento de algunas de las funciones de arrays m�s populares que
trae consigo PHP.
Sin m�s, vamos a introducirnos en materia con varios
ejemplos interesantes de manejo de vectores.
Modificar el n�mero de
elementos de un array
Ahora vamos a ver varios ejemplos mediante los
cuales nuestros arrays pueden aumentar o reducir el n�mero de casillas
disponibles.
Reducir el tama�o de un array
array_slice()
Para disminuir el n�mero de casillas de un
arreglo tenemos varias funciones. Entre ellas, array_slice() la utilizamos
cuando queremos recortar algunas casillas del arreglo, sabiendo los �ndices de
las casillas que deseamos conservar.
Recibe tres par�metros. El array,
el �ndice del primer elemento y el n�mero de elementos a tomar, siendo este
�ltimo par�metro opcional.
En el ejemplo siguiente tenemos un array con
cuatro nombres propios. En la primera ejecuci�n de array_slice() estamos
indicando que deseamos tomar todos los elementos desde el �ndice 0 (el
principio) hasta un n�mero total de 3 elementos.
El segundo
array_slice() indica que se tomen todos los elementos a partir del �ndice 1
(segunda casilla).
<?
$entrada = array
("Miguel", "Pepe", "Juan", "Julio", "Pablo");
//modifico el tama�o
$salida = array_slice ($entrada, 0, 3);
//muestro el array
foreach
($salida as $actual)
echo $actual . "<br>";
echo "<p>";
//modifico otra vez
$salida = array_slice
($salida, 1);
//muestro el array
foreach ($salida as $actual)
echo $actual . "<br>";
?>
Tendr� como salida:
Miguel
Pepe
Juan
Pepe
Juan
array_shift()
Esta funci�n extrae el el primer
elemento del array y lo devuelve. Adem�s, acorta la longitud del array
eliminando el elemento que estaba en la primera casilla. Siempre hace lo mismo,
por tanto, no recibir� m�s que el array al que se desea eliminar la primera
posici�n.
En el c�digo siguiente se tiene el mismo vector con nombres
propios y se ejecuta dos veces la funci�n array_shift() eliminando un elemento
en cada ocasi�n. Se imprimen los valores que devuelve la funci�n y los elementos
del array resultante de eliminar la primera casilla.
<?
$entrada = array ("Miguel", "Pepe", "Juan", "Julio",
"Pablo");
//quito la primera casilla
$salida = array_shift
($entrada);
//muestro el array
echo "La funci�n devuelve: " . $salida .
"<br>";
foreach ($entrada as $actual)
echo
$actual . "<br>";
echo "<p>";
//quito la primera
casilla, que ahora ser�a la segunda del array original
$salida = array_shift
($entrada);
echo "La funci�n devuelve: " . $salida . "<br>";
//muestro el array
foreach ($entrada as $actual)
echo $actual . "<br>";
?>
Da como resultado:
La funci�n devuelve: Miguel
Pepe
Juan
Julio
Pablo
La funci�n devuelve: Pepe
Juan
Julio
Pablo
unset()
Se utiliza para destruir una variable dada. En el
caso de los arreglos, se puede utilizar para eliminar una casilla de un array
asociativo (los que no tienen �ndices num�ricos sino que su �ndice es una cadena
de caracteres).
Veamos el siguiente c�digo para conocer c�mo definir un
array asociativo y eliminar luego una de sus casillas.
<?
$estadios_futbol = array("Barcelona"=> "Nou
Camp","Real Madrid" => "Santiago Bernabeu","Valencia" => "Mestalla","Real
Sociedad" => "Anoeta");
//mostramos los estadios
foreach
($estadios_futbol as $indice=>$actual)
echo $indice .
" -- " . $actual . "<br>";
echo "<p>";
//eliminamos
el estadio asociado al real madrid
unset ($estadios_futbol["Real Madrid"]);
//mostramos los estadios otra vez
foreach ($estadios_futbol as
$indice=>$actual)
echo $indice . " -- " . $actual . "<br>";
?>
La salida ser� la siguiente:
Barcelona -- Nou
Camp
Real Madrid -- Santiago Bernabeu
Valencia -- Mestalla
Real
Sociedad -- Anoeta
Barcelona -- Nou Camp
Valencia -- Mestalla
Real Sociedad -- Anoeta
Aumentar el tama�o de un array
Tenemos tambi�n a nuestra disposici�n varias funciones que nos pueden
ayudar a aumentar el n�mero de casillas de un arreglo.
array_push()
Inserta al final del array una serie de casillas
que se le indiquen por par�metro. Por tanto, el n�mero de casillas del array
aumentar� en tantos elementos como se hayan indicado en el par�metro de la
funci�n. Devuelve el n�mero de casillas del array resultante.
Veamos
este c�digo donde se crea un arreglo y se a�aden luego tres nuevos valores.
<?
$tabla = array ("Lagartija", "Ara�a",
"Perro", "Gato", "Rat�n");
//aumentamos el tama�o del array
array_push($tabla, "Gorri�n", "Paloma", "Oso");
foreach ($tabla as
$actual)
echo $actual . "<br>";
?>
Da como resultado esta salida:
Lagartija
Ara�a
Perro
Gato
Rat�n
Gorri�n
Paloma
Oso
array_merge()
Ahora vamos a ver c�mo unir dos arrays utilizando la funci�n array_merge().
A �sta se le pasan dos o m�s arrays por par�metro y devuelve un arreglo con
todos los campos de los vectores pasados.
En este c�digo de ejemplo
creamos tres arrays y luego los unimos con la funci�n array_merge()
<?
$tabla = array ("Lagartija", "Ara�a",
"Perro", "Gato", "Rat�n");
$tabla2 = array ("12","34","45","52","12");
$tabla3 = array ("Sauce","Pino","Naranjo","Chopo","Perro","34");
//aumentamos el tama�o del array
$resultado = array_merge($tabla,
$tabla2, $tabla3);
foreach ($resultado as $actual)
echo $actual . "<br>";
?>
Da
como resultado:
Lagartija
Ara�a
Perro
Gato
Rat�n
12
34
45
52
12
Sauce
Pino
Naranjo
Chopo
Perro
34
Una �ltima cosa. Tambi�n pueden introducirse nuevas casillas en
un arreglo por los m�todos habituales de asignar las nuevas posiciones en el
array a las casillas que necesitemos.
En arrays normales se har�a as�:
$tabla = array ("Sauce","Pino","Naranjo");
$tabla[3]="Algarrobo";
En arrays asociativos:
$estadios_futbol = array("Valencia" => "Mestalla","Real
Sociedad" => "Anoeta");
$estadios_futbol["Barcelona"]= "Nou Camp";
Veremos m�s adelante otras posibilidades del trabajo con arrays.
Ponemos a vuestra disposici�n las p�ginas
PHP que contienen los c�digos con los que hemos trabajado.
Cadenas
Una de las variables m�s
corrientes a las que tendremos que hacer frente en la mayor�a de nuestros
scripts son las cadenas, que no son m�s que informaci�n de car�cter no num�rico
(textos, por ejemplo).
Para asignar a una variable un contenido de este
tipo, lo escribiremos entre comillas dando lugar a declaraciones de este tipo:
| $cadena="Esta es la informaci�n de mi variable"
|
Si queremos ver en pantalla el valor de una
variable o bien un mensaje cualquiera usaremos la instrucci�n echo como
ya lo hemos visto anteriormente:
| echo $cadena //sacar�a "Esta es la informaci�n de mi variable"
|
| echo "Esta es la informaci�n de mi variable" //dar�a el mismo
resultado |
Podemos yuxtaponer o concatenar varias
cadenas poniendo para ello un punto entre ellas:
<? $cadena1="Perro"; $cadena2="
muerde"; $cadena3=$cadena1.$cadena2; echo $cadena3 //El resultado
es: "Perro muerde" ?> |
Tambi�n podemos introducir
variables dentro de nuestra cadena lo cual nos puede ayudar mucho en el
desarrollo de nuestros scripts. Lo que veremos no es el nombre, sino el valor de
la variable:
<? $a=55; $mensaje="Tengo $a a�os"; echo $mensaje //El
resultado es: "Tengo 55 a�os" ?> |
La pregunta que nos podemos
plantear ahora es...�C�mo hago entonces para que en vez del valor "55" me salga
el texto "$a"? En otras palabras, c�mo se hace para que el s�mbolo $ no defina
una variable sino que sea tomado tal cual. Esta pregunta es tanto m�s
interesante cuanto que en algunos de scripts este s�mbolo debe ser utilizado por
una simple raz�n comercial (pago en d�lares por ejemplo) y si lo escribimos tal
cual, el ordenador va a pensar que lo que viene detr�s es una variable siendo
que no lo es.
Pues bien, para meter �ste y otros caracteres utilizados
por el lenguaje dentro de las cadenas y no confundirlos, lo que hay que hacer es
escribir una contrabarra delante:
| Car�cter |
Efecto en la cadena |
| \$ |
Escribe d�lar en la cadena |
| \" |
Escribe comillas en la cadena |
| \\ |
Escribe contrabarra en la cadena |
| \8/2 |
Escribe 8/2 y no 4 en la cadena |
Adem�s,
existen otras utilidades de esta contrabarra que nos permiten introducir en
nuestro documento HTML determinados eventos:
| Car�cter |
Efecto en la cadena |
| \t |
Introduce una tabulaci�n en nuestro texto |
| \n |
Cambiamos de l�nea |
| \r |
Retorno de carro |
Estos cambios de l�nea y
tabulaciones tienen �nicamente efecto en el c�digo y no en el texto ejecutado
por el navegador. En otras palabras, si queremos que nuestro texto ejecutado
cambie de l�nea hemos de introducir un echo "<br>" y no echo
"\n" ya que este ultimo s�lo cambia de l�nea en el archivo HTML creado y
enviado al navegador cuando la p�gina es ejecutada en el servidor. La diferencia
entre estos dos elementos puede ser f�cilmente comprendida mirando el c�digo
fuente producido al ejecutar este script:
<HTML> <HEAD> <TITLE>cambiolinea.php</TITLE> </HEAD> <BODY> <? echo
"Hola, \n sigo en la misma l�nea ejecutada pero no en c�digo
fuente.<br>Ahora cambio de l�nea ejecutada pero continuo en la misma
en el c�digo fuente." ?> </BODY> </HTML>
|
El c�digo fuente que observar�amos
seria el siguiente:
<HTML> <HEAD> <TITLE>cambiolinea.php</TITLE> </HEAD> <BODY> Hola,
sigo en la misma l�nea ejecutada pero no en c�digo
fuente.<br>Ahora cambio de l�nea ejecutada pero continuo en la misma
en el c�digo fuente.</BODY> </HTML>
|
Las cadenas pueden asimismo ser tratadas por
medio de funciones de todo tipo. Veremos estas funciones m�s adelante con m�s
detalle. Tan s�lo debemos retener que existen muchas posibles acciones que
podemos realizar sobre ellas: Dividirlas en palabras, eliminar espacios
sobrantes, localizar secuencias, remplazar caracteres especiales por su
correspondiente en HTML o incluso extraer las etiquetas META de una p�gina web.
Funciones en PHP
En
nuestro manual de p�ginas din�micas vimos el concepto de
funci�n. Vimos que la funci�n podr�a ser definida como un conjunto de
instrucciones que explotan ciertas variables para realizar una tarea m�s o menos
elemental.
PHP basa su eficacia principalmente en este tipo de elemento.
Una gran librer�a que crece constantemente, a medida que nuevas versiones van
surgiendo, es complementada con las funciones de propia cosecha dando como
resultado un sinf�n de recursos que son aplicados por una simple llamada.
Las funciones integradas en PHP son muy f�ciles de utilizar. Tan s�lo
hemos de realizar la llamada de la forma apropiada y especificar los par�metros
y/o variables necesarios para que la funci�n realice su tarea.
Lo que
puede parecer ligeramente m�s complicado, pero que resulta sin lugar a dudas muy
pr�ctico, es crear nuestras propias funciones. De una forma general, podr�amos
crear nuestras propias funciones para conectarnos a una base de datos o crear
los encabezados o etiquetas meta de un documento HTML. Para una aplicaci�n de
comercio electr�nico podr�amos crear por ejemplo funciones de cambio de una
moneda a otra o de calculo de los impuestos a a�adir al precio de articulo. En
definitiva, es interesante crear funciones para la mayor�a de acciones m�s o
menos sistem�ticas que realizamos en nuestros programas.
Aqu� daremos el
ejemplo de creaci�n de una funci�n que, llamada al comienzo de nuestro script,
nos crea el encabezado de nuestro documento HTML y coloca el titulo que queremos
a la p�gina:
<? function
hacer_encabezado($titulo) { $encabezado="<html>\n<head>\n\t<title>$titulo</title>\n</head>\n"; echo
$encabezado; } ?> |
Esta funci�n podr�a ser
llamada al principio de todas nuestras p�ginas de la siguiente forma:
$titulo="Mi web"; hacer_encabezado($titulo);
|
De esta forma automatizamos el proceso de creaci�n
de nuestro documento. Podr�amos por ejemplo incluir en la funci�n otras
variables que nos ayudasen a construir la etiquetas meta y de esta forma, con un
esfuerzo m�nimo, crear�amos los encabezados personalizados para cada una de
nuestras p�ginas. De este mismo modo nos es posible crear cierres de documento o
formatos diversos para nuestros textos como si se tratase de hojas de estilo que
tendr�an la ventaja de ser reconocidas por todos los navegadores.
Por
supuesto, la funci�n ha de ser definida dentro del script ya que no se encuentra
integrada en PHP sino que la hemos creado nosotros. Esto en realidad no pone
ninguna pega ya que puede ser incluida desde un archivo en el que iremos
almacenando las definiciones de las funciones que vayamos creando o recopilando.
Estos archivos en los que se guardan las funciones se llaman librer�as.
La forma de incluirlos en nuestro script es a partir de la instrucci�n
require o include:
| require("libreria.php") o include("libreria.php")
|
En resumen, la cosa quedar�a as�:
Tendr�amos un archivo libreria.php como sigue
<? //funci�n de encabezado y colocaci�n del titulo Function
hacer_encabezado($titulo) { $encabezado="<html>\n<head>\n\t<title>$titulo</title>\n</head>\n"; echo
$encabezado; } ?> |
Por otra parte
tendr�amos nuestro script principal p�gina.php (por ejemplo):
<? include("libreria.php"); $titulo="Mi
Web"; hacer_encabezado($titulo); ?> <body> El cuerpo
de la p�gina </body> </html> |
Podemos meter todas las funciones
que vayamos encontrando dentro de un mismo archivo pero resulta much�simo m�s
ventajoso ir clasific�ndolas en distintos archivos por tem�tica: Funciones de
conexi�n a bases de datos, funciones comerciales, funciones generales, etc. Esto
nos ayudara a poder localizarlas antes para corregirlas o modificarlas, nos
permite tambi�n cargar �nicamente el tipo de funci�n que necesitamos para el
script sin recargar �ste en exceso adem�s de permitirnos utilizar un determinado
tipo de librer�a para varios sitios webs distintos.
Tambi�n puede
resultar muy pr�ctico el utilizar una nomenclatura sistem�tica a la hora de
nombrarlas: Las funciones comerciales podr�an ser llamadas com_loquesea, las de
bases de datos bd_loquesea, las de tratamiento de archivos file_loquesea. Esto
nos permitir� reconocerlas enseguida cuando leamos el script sin tener que
recurrir a nuestra oxidada memoria para descubrir su utilidad.
No
obstante, antes de lanzarnos a crear nuestra propia funci�n, merece la pena
echar un vistazo a la documentaci�n para ver si dicha funci�n ya existe o
podemos aprovecharnos de alguna de las existentes para aligerar nuestro trabajo.
As�, por ejemplo, existe una funci�n llamada header que crea un encabezado HTML
configurable lo cual nos evita tener que crearla nosotros mismos.
Como
puede verse, la tarea del programador puede en algunos casos parecerse a la de
un coleccionista. Hay que ser paciente y met�dico y al final, a base de trabajo
propio, intercambio y tiempo podemos llegar poseer nuestro peque�o tesoro.
Ejemplo de funci�n
Vamos a ver un ejemplo de creaci�n de
funciones en PHP. Se trata de hacer una funci�n que recibe un texto y lo escribe
en la p�gina con cada car�cter separado por "-". Es decir, si recibe "hola" debe
escribir "h-o-l-a" en la p�gina web.
La manera de
realizar esta funci�n ser� recorrer el string, caracter a caracter, para
imprimir cada uno de los caracteres, seguido de el signo "-". Recorreremos el
string con un bucle for, desde el carater 0 hasta el n�mero de caracteres total
de la cadena.
El n�mero de caracteres de una cadena se obtiene con la
funci�n predefinida en PHP strlen(), que recibe el string entre par�ntesis y
devuelve el n�mero de los caracteres que tenga.
<html>
<head>
<title>funcion 1</title>
</head>
<body>
<?
function escribe_separa($cadena){
for
($i=0;$i<strlen($cadena);$i++){
echo
$cadena[$i];
if
($i<strlen($cadena)-1)
echo "-";
}
}
escribe_separa ("hola");
echo
"<p>";
escribe_separa ("Texto m�s largo, a ver lo que hace");
?>
</body>
</html>
La funci�n que
hemos creado se llama escribe_separa y recibe como par�metro la cadena que hay
que escribir con el separador "-". El bucle for nos sirve para recorrer la
cadena, desde el primer al �ltimo caracter. Luego, dentro del bucle, se imprime
cada caracter separado del signo "-". El if que hay dentro del bucle for
comprueba que el actual no sea el �ltimo caracter, porque en ese caso no habr�a
que escribir el signo "-" (queremos conseguir "h-o-l-a" y si no estuviera el if
obtendr�amos "h-o-l-a-").
En el c�digo mostrado se hacen un par de
llamadas a la funci�n para ver el resultado obtenido con diferentes cadenas como
par�metro. Podemos ver el script en marcha.
M�s sobre funciones: paso de par�metros
Vamos a
explicar algunos detalles adicionales sobre la definici�n y uso de funciones,
para ampliar el art�culo de funciones en
php.
Paso de par�metros
Los par�metros son los datos
que reciben las funciones y que utilizan para realizar las operaciones de la
funci�n. Una funci�n puede recibir cualquier n�mero de par�metros, incluso
ninguno. A la hora de definir la funci�n, en la cabecera, se definen los
par�metros que va a recibir.
function f1
($parametro1, $par�metro2)
As� definimos una funci�n llamada f1
que recibe dos par�metros. Como se puede observar, no se tiene que definir el
tipo de datos de cada par�metro.
Los par�metros tienen validez durante
la ejecuci�n de la funci�n, es decir, tienen un �mbito local a la funci�n donde
se est�n recibiendo. Cuando la funci�n se termina, los par�metros dejan de
existir.
Los par�metros se pasan por valor
El paso de
par�metros en PHP se realiza por valor. "Por valor" es una manera t�pica de
pasar par�metros en funciones, quiere decir que el cambio de un dato de un
par�metro no actualiza el dato de la variable que se pas� a la funci�n. Por
ejemplo, cuando invocamos una funci�n pasando una variable como par�metro, a
pesar de que cambiemos el valor del par�metro dentro de la funci�n, la variable
original no se ve afectada por ese cambio. Puede que se vea mejor con un
ejemplo:
function porvalor ($parametro1){
$parametro1="hola";
echo "<br>" . $parametro1; //imprime "hola"
}
$mivariable = "esto no cambia";
porvalor ($mivariable);
echo "<br>" . $mivariable; //imprime "esto no cambia"
Esta p�gina tendr� como resultado:
hola
esto no
cambia
Paso de par�metros por referencia
En
contraposici�n al paso de par�metros por valor, est� el paso de par�metros por
referencia. En este �ltimo caso, el cambio del valor de un par�metro dentro de
una funci�n s� afecta al valor de la variable original.
Podemos pasar
los par�metros por referencia si, en la declaraci�n de la funci�n, colocamos un
"&" antes del par�metro.
<?
function
porreferencia(&$cadena)
{
$cadena = 'Si cambia';
}
$str =
'Esto es una cadena';
porreferencia ($str);
echo $str; // Imprime 'Si
cambia'
?>
Este script mostrar� por pantalla 'Si cambia'.
Par�metros por defecto
Podemos definir valores por
defecto para los par�metros. Los valores por defecto sirven para que los
par�metros contengan un dato predefinido, con el que se inicializar�n si no se
le pasa ning�n valor en la llamada de la funci�n. Los valores por defecto se
definen asignando un dato al par�metro al declararlo en la funci�n.
function pordefecto
($parametro1="pepe";$parametro2=3)
Para la definici�n de funci�n
anterior, $parametro1 tiene como valor por defecto "pepe", mientras que
$parametro2 tiene 3 como valor por defecto.
Si llamamos a la funci�n sin
indicar valores a los par�metros, estos tomar�n los valores asignados por
defecto:
pordefecto () // $parametro1 vale "pepe" y
$parametro2 vale 3
Si llamamos a la funci�n indicando un valor,
este ser� tenido en cuenta para el primer par�metro.
pordefecto ("hola") // $parametro1 vale "hola" y $parametro2 vale
3
Atenci�n, estamos obligados a declarar todos los par�metros con
valores por defecto al final.
M�s sobre
funciones: Retorno de valores
Las funciones pueden retornar
valores. Para ello se utiliza la palabra "return" indicando a continuaci�n el
dato o variable que tienen que retornar. La funci�n puede tener m�ltiples
return, aunque s�lo devolver� datos por uno de ellos cada vez porque, cuando se
llama a return, se termina la ejecuci�n de la funci�n devolviendo el dato
indicado.
Ejemplo de funci�n IVA
Vamos a ver un nuevo
ejemplo para ilustrar el funcionamiento de una funci�n un poco m�s avanzada, que
utiliza parte de los nuevos conceptos introducidos en este art�culo.
Se
trata de hacer una funci�n que calcula el IVA y que recibe dos par�metros. Uno
el valor sobre el que se calcula y el otro el porcentaje a aplicar. Si no se
indica el porcentaje de IVA se entiende que es el 16%.
<html>
<head>
<title>ejemplo
IVA</title>
</head>
<body>
<?
function
iva($base,$porcentaje=16){
return $base * $porcentaje /100;
}
echo iva(1000) . "<br>";
echo iva(1000,7) .
"<br>";
echo iva(10,0) . "<br>";
?>
</body>
</html>
Si se han entendido bien los conceptos, este
ejemplo no puede resultar dif�cil. La funci�n recibe un par�metro llamado
$porcentaje con 16 como valor por defecto. Devuelve el porcentaje dado aplicado
a la base tambi�n indicada por par�metro.
As� pues, en la primera
ejecuci�n de la funci�n, como no se indica el porcentaje, se mostrar� el 16% de
1000. En la segunda, se muestra el 7% de mil y en la tercera, el 0% de 10.
Puede verse el resultado en una p�gina aparte. http://www.desarrolloweb.com/articulos/ejemplos/php/ej_iva.php
Retornar m�ltiples valores
Una funci�n devuelve un �nico
valor. Si queremos hacer que se puedan devolver varios valores distintos tenemos
que recurrir a un truco que consiste en devolver un array.
function small_numbers()
{
return array (0, 1,
2);
}
list ($zero, $one, $two) = small_numbers();
list()
se usa para asignar una lista de variables en una sola operaci�n. Despu�s de esa
operaci�n, $zero valdr� 0, $one valdr� 1 y $two valdr� 2.
Control del flujo en PHP: Condiciones
IF
La programaci�n exige en muchas ocasiones la repetici�n de
acciones sucesivas o la elecci�n de una determinada secuencia y no de otra
dependiendo de las condiciones espec�ficas de la ejecuci�n.
Como
ejemplo, podr�amos hacer alusi�n a un script que ejecute una secuencia diferente
en funci�n del d�a de la semana en el que nos encontramos.
Este tipo de
acciones pueden ser llevadas a cabo gracias a una paleta de instrucciones
presentes en la mayor�a de los lenguajes. En este cap�tulo describiremos
someramente algunas de ellas propuestas por PHP y que resultan de evidente
utilidad.
Para evitar el complicar el texto, nos limitaremos a
introducir las m�s importantes dejando de lado otras cuantas que podr�n ser
f�cilmente asimilables a partir de ejemplos pr�cticos.
Las
condiciones if
Cuando queremos que el programa, llegado a un cierto
punto, tome un camino concreto en determinados casos y otro diferente si las
condiciones de ejecuci�n difieren, nos servimos del conjunto de instrucciones
if, else y elseif. La estructura de base de este tipo de
instrucciones es la siguiente:
if (condici�n) { Instrucci�n
1; Instrucci�n
2; ... } else { Instrucci�n
A; Instrucci�n B; ... }
|
Llegados a este punto, el programa verificar� el
cumplimiento o no de la condici�n. Si la condici�n es cierta las instrucciones 1
y 2 ser�n ejecutadas. De lo contrario (else), las instrucciones A y B
ser�n llevadas a cabo.
Esta estructura de base puede complicarse un poco
m�s si tenemos cuenta que no necesariamente todo es blanco o negro y que muchas
posibilidades pueden darse. Es por ello que otras condiciones pueden plantearse
dentro de la condici�n principal. Hablamos por lo tanto de condiciones anidadas
que tendr�an una estructura del siguiente tipo:
if (condici�n1) { Instrucci�n
1; Instrucci�n
2; ... } else { if
(condici�n2) { Instrucci�n
A; Instrucci�n
B; ... } else { Instrucci�n
X ... } }
|
De este modo podr�amos introducir tantas
condiciones como queramos dentro de una condici�n principal.
De gran
ayuda es la instrucci�n elseif que permite en una sola l�nea introducir
una condici�n adicional. Este tipo de instrucci�n simpifica ligeramente la
sintaxis que acabamos de ver:
if (condici�n1) { Instrucci�n
1; Instrucci�n
2; ... } elseif
(condici�n2) { Instrucci�n
A; Instrucci�n
B; ... } else { Instrucci�n
X ... } |
El uso de esta
herramienta resultar� claro con un poco de pr�ctica. Pongamos un ejemplo
sencillo de utilizaci�n de condiciones. El siguiente programa permitir�a
detectar la lengua empleada por el navegador y visualizar un mensaje en dicha
lengua.
<HTML> <HEAD> <TITLE>Detector de
Lengua</TITLE> </HEAD> <BODY> <? //Antes
de nada introducimos mensajes en forma de
variables $espanol="Hola"; $ingles="Hello"; $frances="Bonjour";
//Ahora
leemos del navegador cu�l es su lengua
oficial $idioma=substr($HTTP_ACCEPT_LANGUAGE,0,2);
//Formulamos
las posibilidades que se pueden dar if ($idioma == "es") {echo
"$espanol";} elseif ($idioma=="fr") {echo
"$frances";} else {echo
"$ingles";} ?> </BODY> </HTML>
|
Para poder ver el
funcionamiento de este script es necesario cambiar el idioma preferido lo cual
puede ser realizado a partir del men� de opciones del navegador.
Para
leer la lengua aceptada por el navegador lo que hacemos es definir una variable
($idioma) y, mediante la funci�n substr, recogemos las dos
primeras letras del c�digo correspondiente al idioma aceptado por el navegador
($HTTP_ACCEPT_LANGUAGE).
La tercera parte de script se encarga de ver si
el navegador est� en espa�ol (es), franc�s (fr) o en cualquier otro idioma que
no sea ninguno de estos dos y de imprimir el mensaje que proceda en cada caso.
A notar que, cuando se trata de comparar variables, ponemos un doble
igual "==" en lugar de un simple "=". Este �ltimo queda reservado exclusivamente
para asignar valores a variables
Control del flujo en PHP: Bucles I
Los ordenadores,
como cualquier m�quina, est�n dise�ados para realizar tareas repetitivas. Es por
ello que nuestros programas pueden aprovecharse de este principio para realizar
una determinada secuencia de instrucciones un cierto n�mero de veces. Para ello,
utilizamos las estructuras llamadas en bucle que nos ayudan a, usando unas pocas
l�neas, realizar una tarea incluida dentro del bucle un cierto numero de veces
definido por nosotros mismos.
PHP propone varios tipos de bucle cada uno
con caracter�sticas especificas:
Bucle while
Sin duda el
bucle m�s utilizado y el m�s sencillo. Lo usamos para ejecutar las instrucciones
contenidas en su interior siempre y cuando la condici�n definida sea verdadera.
La estructura sint�ctica es la siguiente.
while
(condici�n) { instruccion1; instruccion2; ... }
|
Un ejemplo sencillo es este bucle que aumenta el
tama�o de la fuente en una unidad a cada nueva vuelta por el bucle:
<? $size=1; While
($size<=6) { echo"<font size=$size>Tama�o
$size</font><br>\n"; $size++; } ?>
|
A modo de explicaci�n, diremos
que, antes de nada, hemos de definir el valor de la variable que vamos a evaluar
en la condici�n. Algo absolutamente obvio pero f�cil de olvidar. En este caso le
hemos atribuido un valor de 1 que corresponde a la letra m�s peque�a.
El
paso siguiente es crear el bucle en el que imponemos la condici�n que la
variable no exceda el valor de 6.
La instrucci�n a ejecutar ser�
imprimir en nuestro documento un c�digo HTML en el que la etiqueta font y
el mensaje que contiene var�an a medida que $size cambia su valor.
El siguiente paso es incrementar en una unidad el valor de $size. Esto
se puede hacer con una expresi�n como la mostrada en el bucle ($size++) que en
realidad es sin�nima de:
$size=$size+1
Veremos otras de estas
abreviaciones m�s adelante.
Otro ejemplo del buble While
El bucle while se suele utiliza cuando no se sabe exactamente cuantas
iteraciones se deben realizar antes de acabar. Vamos a utilizarlo en otro
ejemplo, en el que hay que recorrer una cadena hasta encontrar un car�cter dado.
Si lo encuentra, escribir su posici�n. Si no, escribir que no se ha encontrado.
| Nota: Para hacer este ejercicio necesitamos
conocer la funci�n de cadena strlen(), que obtiene la longitud de la
cadena que se le pase por par�metro.
int strlen (string cad) Devuelve un entero igual a la longitud de
la cadena. |
<?
$cadena = "hola a todo el mundo";
//recorro la cadena hasta encontrar una "m"
$i=0;
while
($cadena[$i]!="m" && $i< strlen($cadena)){
$i++;
}
if ($i==strlen($cadena))
echo "No se
encuentra...";
else
echo "Est� en la posici�n $i";
?>
En este ejemplo se define una cadena con el valor "hola a todo el mundo".
Posteriormente se recorre esa cadena hasta el final de la cadena o hasta
encontrar el caracter "m", utilizando una variable $i que lleva la cuenta de los
caracteres recorridos.
Al final del bucle while, si se sali� porque se encontr� el caracter "m", la
variable $i valdr� un n�mero menor que la longitud de la cadema. Si se sali� por
llegar al final de la cadena, la variable $i valdr� lo mismo que la longitud en
caracteres de esa cadena. En el condicional simplemente se comprueba si $i vale
o no lo mismo que la longitud de la cadena, mostrando los mensajes adecuados en
cada caso.
Podemos ver el ejemplo en funcionamiento.
Bucle do/while
Este tipo de bucle no difiere en exceso del
anterior. La sintaxis es la siguiente:
do { instruccion1; instruccion2; ... } while
(condici�n) |
La diferencia con respecto a los
bucles while es que este tipo de bucle eval�a la condici�n al final con
lo que, incluso siendo falsa desde el principio, �ste se ejecuta al menos una
vez.
Control del flujo en PHP: Bucles
II
Bucle for
PHP est� provisto de otros tipos de
bucle que tambi�n resultan muy pr�cticos en determinadas situaciones. El m�s
popular de ellos es el bucle for que, como para los casos anteriores, se
encarga de ejecutar las instrucciones entre llaves. La diferencia con los
anteriores radica en c�mo se plantea la condici�n de finalizaci�n del bucle.
Para aclarar su funcionamiento vamos a expresar el ejemplo de bucle while
visto en el cap�tulo anterior en forma de bucle for:
<? For
($size=1;$size<=6;$size++) { echo"<font
size=$size>Tama�o $size</font><br>\n"; } ?>
|
Las expresiones dentro del
par�ntesis definen respectivamente:
-Inicializaci�n de la variable.
Valida para la primera vuelta del bucle.
-Condici�n de evaluaci�n a cada
vuelta. Si es cierta, el bucle continua.
-Acci�n a realizar al final de
cada vuelta de bucle.
Bucle foreach
Este bucle, implementado
en las versiones de PHP4, nos ayuda a recorrer los valores de un array lo cual
puede resultar muy �til por ejemplo para efectuar una lectura r�pida del mismo.
Recordamos que un array es una variable que guarda un conjunto de elementos
(valores) catalogados por claves.
La estructura general es la siguiente:
Foreach ($array as
$clave=>$valor) { instruccion1; instruccion2; �; }
|
Un ejemplo pr�ctico es la lectura de un array lo
cual podr�a hacerse del siguiente modo:
<? $moneda=array("Espa�a"=> "Peseta","Francia" =>
"Franco","USA" => "Dolar"); Foreach ($moneda as
$clave=>$valor) { echo "Pais: $clave Moneda:
$valor<br>"; } ?> |
Este script se encargar�a de
mostrarnos por pantalla el contenido del array $moneda. No resultar�a
mala idea crear una funci�n propia basada en este bucle que nos permitiese
visualizar arrays monodimensionales y almacenarla en nuestra librer�a. Esta
funci�n podr�a ser definida de esta forma:
Function mostrar_array ($array) { Foreach ($array as
$clave=>$valor) {echo "$clave=>$valor<br>";} }
|
Break y continue
Estas dos
instrucciones se introducen dentro de la estructura y nos sirven respectivamente
para escapar del bucle o saltar a la iteraci�n siguiente. Pueden resultarnos muy
pr�cticas en algunas situaciones.
Operadores
Las variables, como base de informaci�n
de un lenguaje, pueden ser creadas, modificadas y comparadas con otras por medio
de los llamados operadores. En los cap�tulos anteriores hemos utilizado en
nuestros ejemplos algunos de ellos.
En este cap�tulo pretendemos listar
los m�s importantes y as� dar constancia de ellos para futuros ejemplos.
Operadores aritm�ticos
Nos permiten realizar operaciones
num�ricas con nuestras variables
| + |
Suma |
| - |
Resta |
| * |
Multiplicaci�n |
| / |
Divisi�n |
| % |
Devuelve el resto de la divisi�n |
| Referencia: El operador aritm�tico que puede
resultar m�s desconocido para los lectores es el operador %. Explicamos
con mayor detenimiento su funcionamiento y un ejemplo en el que es �til en
el taller: Listas de elementos
con colores alternos en PHP. |
Operadores de
comparaci�n
Se utilizan principalmente en nuestras condiciones para
comparar dos variables y verificar si cumple o no la propiedad del operador.
| == |
Igualdad |
| != |
Desigual |
| < |
Menor que |
| <= |
Menor igual que |
| > |
Mayor que |
| >= |
Mayor igual que |
Operadores l�gicos
Se usan en combinaci�n con los operadores de comparaci�n cuando la expresi�n
de la condici�n lo requiere.
Operadores de
incremento
Sirven para aumentar o disminuir de una unidad el valor de
una variable
| ++$variable |
Aumenta de 1 el valor de $variable |
| --$variable |
Reduce de uno el valor de
$variable |
Operadores combinados
Una
forma habitual de modificar el valor de las variables es mediante los operadores
combinados:
| $variable += 10 |
Suma 10 a $variable |
| $variable -= 10 |
Resta 10 a $variable |
| $variable .= "a�ado" |
Concatena las cadenas $variable y
"a�ado" |
Este tipo de expresiones no son m�s que
abreviaciones de otras formas m�s cl�sicas:
$variable += 10
es
lo mismo que:
$variable = $variable+10
Pasar variables por la URL
Bucles y condiciones son
muy �tiles para procesar los datos dentro de un mismo script. Sin embargo, en un
sitio Internet, las p�ginas vistas y los scripts utilizados son numerosos. Muy a
menudo necesitamos que nuestros distintos scripts est�n conectados unos con
otros y que se sirvan de variables comunes. Por otro lado, el usuario
interacciona por medio de formularios cuyos campos han de ser procesados para
poder dar una respuesta. Todo este tipo de factores din�micos han de ser
eficazmente regulados por un lenguaje como PHP.
Es posible que ya os
hay�is percatado de que las variables de un script tienen una validez exclusiva
para el script y que nos resulta imposible conservar su valor cuando ejecutamos
otro archivo distinto aunque ambos est�n enlazados. Existen varias formas de
enviar las variables de una p�gina a otra de manera a que la p�gina destino
reconozca el valor asignado por el script de origen:
Pasar variables
por URL
Para pasar las variables de una p�gina a otra lo podemos
hacer introduciendo dicha variable dentro del enlace hipertexto de la p�gina
destino. La sintaxis ser�a la siguiente:
| <a
href="destino.php?variable1=valor1&variable2=valor2&...">Mi
enlace</a> |
Pod�is observar que estas
variables no poseen el s�mbolo $ delante. Esto es debido a que en realidad este
modo de pasar variables no es espec�fico de PHP sino que es utilizado por otros
lenguajes.
Ahora nuestra variable pertenece tambi�n al entorno de la
p�gina destino.php y est� lista para su explotaci�n.
| Nota: No siempre se definen autom�ticamente las
variables recibidas por par�metro en las p�ginas web, depende de una
variable de configuraci�n de PHP: register_globals, que tiene que estar
activada para que as� sea. Ver comentarios del art�culo al final de la
p�gina para m�s informaci�n. |
Para aclarar posibles
dudas, veamos esto en forma de ejemplo. Tendremos pues dos p�ginas,
origen.html (no es necesario darle extensi�n PHP puesto que no hay ning�n
tipo de c�digo) y destino.php:
<HTML> <HEAD> <TITLE>origen.html</TITLE> </HEAD> <BODY> <a
href="destino.php?saludo=hola&texto=Esto es una variable
texto">Paso variables saludo y texto a la p�gina
destino.php</a> </BODY> </HTML>
|
<HTML> <HEAD> <TITLE>destino.php</TITLE> </HEAD> <BODY> <? echo
"Variable \$saludo: $saludo <br>\n"; echo "Variable \$texto:
$texto <br>\n" ?> </BODY> </HTML>
|
$HTTP_GET_VARS
Recordamos que es posible recopilar en una variable tipo array el
conjunto de variables que han sido enviadas al script por este m�todo a partir
de la variable de sistema $HTTP_GET_VARS, que es un array asociativo.
Utiliz�ndolo quedar�a as�:
<?
echo "Variable \$saludo: $HTTP_GET_VARS["saludo"]
<br>\n";
echo "Variable \$texto: $HTTP_GET_VARS["texto"]
<br>\n"
?>
| Nota: Aunque podamos recoger variables con este
array asociativo o utilizar directamente las variables que se definen en
nuestra p�gina, resulta m�s seguro utilizar $HTTP_GET_VARS por dos
razones, la primera que as� nos aseguramos que esa varible viene realmente
de la URL y la segunda, que as� nuestro c�digo ser� m�s claro cuando lo
volvamos a leer, porque quedar� especificado que esa variable estamos
recibi�ndola por la URL. |
$_GET
A
partir de la versi�n 4.1.0 de PHP se ha introducido el array asociativo $_GET,
que es id�ntico a $HTTP_GET_VARS, aunque un poco m�s corto de
escribir.
Procesar variables de
formularios
Este tipo de transferencia es de gran utilidad ya
que nos permite interaccionar directamente con el usuario.
El proceso es
similar al explicado para las URLs. Primeramente, presentamos una primera p�gina
con el formulario cl�sico a rellenar y las variables son recogidas en una
segunda p�gina que las procesa:
| Nota: No siempre se definen autom�ticamente las
variables recibidas por el formulario en las p�ginas web, depende de una
variable de configuraci�n de PHP: register_globals, que tiene que estar
activada para que as� sea. Ver comentarios del art�culo al final de la
p�gina para m�s informaci�n. |
<HTML> <HEAD> <TITLE>formulario.html</TITLE> </HEAD> <BODY> <FORM
METHOD="POST" ACTION="destino2.php"> Nombre<br> <INPUT
TYPE="TEXT"
NAME="nombre"><br> Apellidos<br> <INPUT
TYPE="TEXT" NAME="apellidos"><br> <INPUT
TYPE="SUBMIT"> </FORM> </BODY> </HTML>
|
<HTML> <HEAD> <TITLE>destino2.php</TITLE> </HEAD> <BODY> <? echo
"Variable \$nombre: $nombre <br>\n"; echo "Variable \$apellidos:
$apellidos <br>\n" ?> </BODY> </HTML>
|
$HTTP_POST_VARS
Recordamos que es posible recopilar en una variable tipo array el
conjunto de variables que han sido enviadas al script por este m�todo a partir
de la variable de sistema $HTTP_POST_VARS.
echo "Variable \$nombre: " .
$HTTP_POST_VARS["nombre"] . "<br>\n";
| Nota: Aunque podamos recoger variables con este
array asociativo o utilizar directamente las variables que se definen en
nuestra p�gina, resulta m�s seguro utilizar $HTTP_POST_VARS por dos
razones, la primera que as� nos aseguramos que esa varible viene realmente
de un formulario y la segunda, que as� nuestro c�digo ser� m�s claro
cuando lo volvamos a leer, porque quedar� especificado que esa variable
estamos recibi�ndola por un
formulario. |
$_POST
A partir de PHP
4.1.0 se pueden recoger las variables de formulario utilizando tambi�n el array
asociativo $_POST, que es el mismo que $HTTP_POST_VARS, pero m�s corto de
escribir.
Ejemplo de restricci�n de acceso por edad
Para continuar aportando ejemplos al uso de formularios vamos a realizar una
p�gina que muestra solicita la edad del visitante y, dependiendo de dicha edad,
permita o no visualizar el contenido de la web. A los mayores de 18 a�os se les
permite ver la p�gina y a los menores no.
El ejemplo es muy sencillo y no valdr�a tal cual est� para utilizarlo a modo
de una verdadera restricci�n de acceso. �nicamente nos sirve para saber c�mo
obtener datos de un formulario y como tratarlos para realizar una u otra acci�n,
dependiendo de su valor.
La p�gina del formulario, que hemos llamado edad.php tendr�a esta forma:
<html>
<head>
<title>Restringir por edad</title>
</head>
<body>
<form action="edad2.php" method="post">
Escribe tu edad: <input type="text" name="edad" size="2">
<input type="submit" value="Entrar">
</form>
</body>
</html>
Esta es una p�gina sin ning�n c�digo PHP, simplemente tiene un formulario.
Fij�monos en el action del formulario, que est� dirigido hacia una p�gina
llamada edad2.php, que es la que recibir� el dato de la edad y mostrar� un
contenido u otro dependiendo de ese valor. Su c�digo es el siguiente:
<html>
<head>
<title>Restringir por edad</title>
</head>
<body>
<?
$edad = $_POST["edad"];
echo "Tu
edad: $edad<p>";
if ($edad < 18) {
echo "No
puedes entrar";
}else{
echo "Bienvenido";
}
?>
</body>
</html>
Esperamos que este otro c�digo tampoco resulte extra�o. Simplemente se recibe
la edad, utilizando el array $_POST. Luego se muestra la edad y se ejecuta una
expresi�n condicional en funci�n de que la edad sea menor que 18. En caso
positivo (edad menor que 18), se muestra un mensaje que informa de que no se
deja acceder al p�gina. En caso negativo (mayor o igual a 18) se muestra un
mensaje de bienvenida.
Podemos ver el ejemplo en funcionamiento.
Autollamada de p�ginas
Al incluir un
formulario en una p�gina se debe indicar, a trav�s del atributo action, el
nombre del archivo PHP al que enviaremos los datos escritos en el formulario. De
este modo, para un esquema de env�o de datos por formulario, pueden participar
dos p�ginas: una que contiene el formulario y otra que recibe los datos de dicho
formulario.
Lo mismo ocurre cuando enviamos variables por una URL.
Tenemos una p�gina que contendr� el enlace y otra p�gina que recibir� y tratar�
esos datos para mostrar unos resultados.
En el presente art�culo vamos a
ver c�mo se puede enviar y recibir datos de un formulario con una �nica p�gina.
Asimismo, veremos como en la misma p�gina podemos tener enlaces con paso de
variables por URL y adem�s, podemos recoger y tratar esos datos con la misma
p�gina. A este efecto podemos llamarte "autollamada de p�ginas", tambi�n se le
suele llamar como "Formularios reentrantes" o t�rminos similares. Es muy
interesante conocer el modo de funcionamiento de estos scripts, porque ser�n muy
habituales en nuestras p�ginas PHP y ayudan mucho a tener los c�digos ordenados.
En ambos casos, para formularios o env�o de datos por la URL, se debe
seguir un esquema como este:
- Comprobar si recibo datos por URL o por
formulario
- Si no recibo datos
- Muestro el formulario o
los enlaces que pasan variables.
- Si recibo datos
-
Entonces tengo que procesar el formulario o las variables de la URL
Para un formulario
Veamos a continuaci�n como ser�a el
c�digo de un formulario reentrante.
<html>
<head>
<title>Me llamo a mi
mismo...</title>
</head>
<body>
<?
if
(!$_POST){
?>
<form action="auto-llamada.php"
method="post">
Nombre: <input type="text"
name="nombre" size="30">
<br>
Empresa: <input type="text" name="empresa"
size="30">
<br>
Telefono:
<input type="text" name="telefono" size=14 value="+34 " >
<br>
<input type="submit"
value="Enviar">
</form>
<?
}else{
echo "<br>Su nombre: " . $_POST["nombre"];
echo "<br>Su empresa: " . $_POST["empresa"];
echo "<br>Su Tel�fono: " . $_POST["telefono"];
}
?>
</body>
</html>
En el
ejemplo, el primer paso es conocer si se est�n recibiendo o no datos por un
formulario. Para ello se comprueba con un enunciado if si existe o no una
variable $_POST.
En concreto if (!$_POST) querr�a decir algo como "Si no
existen datos venidos de un formulario". En caso de que no existan, muestro el
formulario. En caso de que s� existan, recojo los datos y los imprimo en la
p�gina.
Se puede ver el ejemplo en funcionamiento en una p�gina aparte.
Para paso de variables por URL
La idea es la misma.
Comprobar con un enunciado if si se reciben o no datos desde una URL. Veamos el
c�digo a continuaci�n. Se trata de una p�gina que muestra una serie de enlaces
para ver las tablas de multiplicar de el 1 hasta el 10. Cada uno de los enlaces
muestra una tabla de multiplicar. Pulsando el primer enlace podemos ver la tabla
del 1, pulsando el segundo la tabla del 2, etc.
Recordemos que la p�gina
se llama a si misma. Para comprenderla m�s f�cilmente ser� interesante verla en funcionamiento.
<html>
<head>
<title>Tablas de multiplicar</title>
</head>
<body>
<?
if (!$_GET){
for
($i=1;$i<=10;$i++){
echo
"<br><a href='ver_tabla.php?tabla=$i'>Ver la tabla del
$i</a>\n";
}
} else {
$tabla=$_GET["tabla"];
?>
<table align=center
border=1 cellpadding="1">
<?
for
($i=0;$i<=10;$i++){
echo
"<tr><td>$tabla X $i</td><td>=</td><td>" .
$tabla * $i . "</td></tr>\n";
}
?>
</table>
<?
}
?>
</body>
</html>
Este c�digo es un poco m�s
complicado, porque hace un poco m�s de cosas que el anterior, pero para el
asunto que nos ocupa que es la autollamada de p�ginas, todo sigue igual de
simple.
Hay que fijarse en el if que comprueba si se reciben o no datos
por URL: if (!$_GET), que querr�a decir algo como "Si no se reciben variables
por la URL".
En caso positivo (no se reciben datos por URL) se muestran
los enlaces para ver cada una de las tablas y en caso de que s� se reciban
datos, se muestra la tabla de multiplicar del n�mero que se est� recibiendo en
la URL.
Para hacer para mostrar los enlaces y las tablas de multiplicar
se utilizan bucles for, que esperamos que no resulten desconocidos para el
lector. Puede conocerse algo m�s sobre los bucles for en Control del
flujo en PHP: Bucles II.
Utilizaci�n de las cookies
Sin duda este t�rmino
resultara familiar para muchos. Algunos lo habr�n le�do u o�do pero no saben de
qu� se trata. Otros sin embargo sabr�n que las cookies son unas informaciones
almacenadas por un sitio web en el disco duro del usuario. Esta informaci�n es
almacenada en un archivo tipo texto que se guarda cuando el navegador accede al
sitio web.
| Referencia: Una explicaci�n de las cookies m�s
detallada se puede encontrar en el art�culo Qu� son las
cookies, publicado en DesarrolloWeb.com. |
Es
posible, por supuesto, ver estos archivos. Para abrirlos hay que ir al
directorio C:\Windows\Cookies para los usuarios de IE 4+ o a
C:\...\Netscape\Users\defaultuser para usuarios de Netscape. Como podr�is
comprobar, en la mayor�a de los casos la informaci�n que se puede obtener es
indescifrable.
La utilidad principal de las cookies es la de poder
identificar al navegador una vez �ste visita el sitio por segunda vez y as�, en
funci�n del perfil del cliente dado en su primera visita, el sitio puede
adaptarse din�micamente a sus preferencias (lengua utilizada, colores de
pantalla, formularios rellenados total o parcialmente, redirecci�n a
determinadas p�ginas...).
Para crear un archivo cookies, modificar o
generar una nueva cookie lo podemos hacer a partir de la funci�n SetCookie:
| setcookie("nombre_de_la_cookie",valor,expiracion);
|
Pongamos un ejemplo sencillo. Imaginemos que
queremos introducir en una variable cookie el nombre del visitante. El nombre ha
podido ser previamente recogido por un formulario tal y como hemos visto:
| setcookie("persona",$nombre,time()+86400*365);
|
De este modo hemos creado una cookie llamada
persona que tiene como valor el contenido de la variable $nombre y tendr� una
duraci�n de 1 a�o a partir de su creaci�n (el tiempo time() actual en segundos
sumado a un a�o en segundos).
Es importante que la creaci�n de la cookie
sea previa a la apertura del documento HTML. En otras palabras, las llamadas a
la funci�n setcookie() deben ser colocadas antes de la etiqueta HTML.
Por otra parte, es interesante se�alar que el hecho de que definir una
cookie ya existente implica el borrado de la antigua. Del mismo modo, el crear
una primera cookie conlleva la generaci�n autom�tica del archivo texto.
Para utilizar el valor de la cookie en nuestros scripts tan s�lo
tendremos que llamar la variable que define la cookie. �Realmente sencillo!
Hay que tener cuidado sin embargo de no definir variables en nuestro
script con el mismo nombre que las cookies puesto que PHP privilegiar� el
contenido de la variable local con respecto a la cookie y no dar� un mensaje de
error. Esto nos puede conducir a errores realmente dif�ciles de detectar.
Recordamos que es posible recopilar en una variable tipo array el
conjunto de cookies almacenadas en el disco duro del internauta mediante la
variable de servidor $HTTP_COOKIE_VARS
Las cookies son una herramienta
fant�stica para personalizar nuestra p�gina pero hay que ser cautos ya que, por
una parte, no todos los navegadores las aceptan y por otra, se puede
deliberadamente impedir al navegador la creaci�n de cookies. Es por ello que
resultan un complemento y no una fuente de variables infalible para nuestro
sitio.
Sesiones I
En
los programas que hemos visto hasta ahora, hemos utilizado variables que s�lo
exist�an en el archivo que era ejecutado. Cuando carg�bamos otra p�gina
distinta, los valores de estas variables se perd�an a menos que nos tom�semos la
molestia de pasarlos por la URL o inscribirlos en las cookies o en un formulario
para su posterior explotaci�n. Estos m�todos, aunque �tiles, no son todo lo
pr�cticos que podr�an en determinados casos en los que la variable que queremos
conservar ha de ser utilizada en varios scripts diferentes y distantes los unos
de los otros.
Podr�amos pensar que ese problema puede quedar resuelto
con las cookies ya que se trata de variables que pueden ser invocadas en
cualquier momento. El problema, ya lo hemos dicho, es que las cookies no son
aceptadas ni por la totalidad de los usuarios ni por la totalidad de los
navegadores lo cual implica que una aplicaci�n que se sirviera de las cookies
para pasar variables de un archivo a otro no ser�a 100% infalible. Es importante
a veces pensar en "la inmensa minor�a", sobre todo en aplicaciones de comercio
electr�nico donde debemos captar la mayor cantidad de clientes posibles y
nuestros scripts deben estar preparados ante cualquier eventual deficiencia del
navegador del cliente.
Nos resulta pues necesario el poder declarar
ciertas variables que puedan ser reutilizadas tantas veces como queramos dentro
de una misma sesi�n. Imaginemos un sitio multiling�e en el que cada vez que
queremos imprimir un mensaje en cualquier p�gina necesitamos saber en qu� idioma
debe hacerse. Podr�amos introducir un script identificador de la lengua del
navegador en cada uno de los archivos o bien declarar una variable que fuese
valida para toda la sesi�n y que tuviese como valor el idioma reconocido en un
primer momento.
Pensemos tambi�n en un carrito de la compra de una
tienda virtual donde el cliente va navegando por las p�ginas del sitio y
a�adiendo los art�culos que quiere comprar a un carrito. Este carrito podr�a ser
perfectamente una variable de tipo array (tabla) que almacena para cada
referencia la cantidad de art�culos contenidos en el carrito. Esta variable
deber�a ser obviamente conservada continuamente a lo largo de todos los scripts.
Este tipo de situaciones son solventadas a partir de las variables de
sesi�n. Una sesi�n es considerada como el intervalo de tiempo empleado por un
usuario en recorrer nuestras p�ginas hasta que abandona nuestro sitio o deja de
actuar sobre �l durante un tiempo prolongado o bien, sencillamente, cierra el
navegador.
PHP nos permite almacenar variables llamadas de sesi�n que,
una vez definidas, podr�n ser utilizadas durante este lapso de tiempo por
cualquiera de los scripts de nuestro sitio. Estas variables ser�n especificas
del usuario de modo que varias variables sesi�n del mismo tipo con distintos
valores pueden estar coexistiendo para cada una de las sesiones que est�n
teniendo lugar simult�neamente. Estas sesiones tienen adem�s su propio
identificador de sesi�n que ser� �nico y espec�fico.
Algunas mejoras
referentes al empleo de sesiones han sido introducidas con PHP4. Es a esta nueva
versi�n a la que haremos referencia a la hora de explicar las funciones
disponibles y la forma de operar. Para los programadores de PHP3 la diferencia
mayor es que est�n obligados a gestionar ellos mismos las sesiones definir sus
propios identificadores de sesi�n.
Veamos en el siguiente cap�tulo la
forma de plasmar esta necesidad t�cnica en nuestros scripts a partir de las
funciones que gestionan las sesiones en PHP.
Sesiones II
Hemos dicho en el cap�tulo anterior que
la variables de sesi�n se diferencian de las variables cl�sicas en que �stas
residen en el servidor, son especificas de un solo usuario definido por un
identificador y pueden ser utilizadas en la globalidad de nuestras p�ginas.
Para iniciar una sesi�n podemos hacerlo de dos formas distintas:
-Declaramos abiertamente la apertura de sesi�n por medio de la funci�n
session_start(). Esta funci�n crea una nueva sesi�n para un nuevo
visitante o bien recupera la que est� siendo llevada a cabo.
-Declaramos
una variable de sesi�n por medio de la funci�n
session_register('variable'). Esta funci�n, adem�s de crear o recuperar
la sesi�n para la p�gina en la que se incluye tambi�n sirve para introducir una
nueva variable de tipo sesi�n.
Las sesiones han de ser iniciadas al
principio de nuestro script. Antes de abrir cualquier etiqueta o de imprimir
cualquier cosa. En caso contrario recibiremos un error.
Con lo visto,
vamos a proponer el ejemplo cl�sico de utilizaci�n de una sesi�n: un contador.
Este contador deber� aumentar de una unidad cada vez que recargamos la p�gina o
apretamos al enlace:
<? session_register('contador'); ?> <HTML> <HEAD> <TITLE>contador.php</TITLE> </HEAD> <BODY> <? If
(isset($contador)==0) {$contador=0;} ++$contador; echo "<a
href=\"contador.php\">Has recargado esta p�gina $contador
veces</a>"; ?> </BODY> </HTML>
|
La condici�n if tiene
en cuenta la posibilidad de que la variable $contador no haya sido
todav�a inicializada. La funci�n isset se encarga de dar un valor cero
cuando una variable no ha sido inicializada.
Otras funciones �tiles para
la gesti�n de sesiones son:
| Funci�n |
Descripci�n |
| Session_id() |
Nos devuelve el identificador de la sesi�n |
| Session_destroy() |
Da por abandonada la sesi�n eliminando variables e
identificador. |
| Session_unregister('variable') |
Abandona una variable sesi�n |
Para aprender m�s
sobre las sesiones, concretamente para ver una aplicaci�n que gestiona un
carrito de compra por medio de variables sesi�n visita nuestro articulo del taller de
PHP.
Si buscas m�s funciones o informaci�n adicional sobre las
sesiones, consulta el manual oficial de PHP.
Trabajar con bases de datos en PHP
Una de las
principales ventajas que presenta el trabajar con p�ginas din�micas es el poder
almacenar los contenidos en bases de datos. De esta forma, podemos organizarlos,
actualizarlos y buscarlos de una manera mucho m�s simple.
El lenguaje
PHP, ya hemos dicho, ofrece interfaces para el acceso a la mayor�a de las bases
de datos comerciales y por ODBC a todas las bases de datos posibles en sistemas
Microsoft, a partir de las cuales podremos editar el contenido de nuestro sitio
con absoluta sencillez.
Esta interacci�n se realiza, por un lado, a
partir de las funciones que PHP nos propone para cada tipo de base de datos y,
por otro estableciendo un di�logo a partir de un idioma universal: SQL
(Structured Query Language) el cual es com�n a todas las bases de datos. Este
lenguaje resulta, como veremos en el tutorial de
SQL, muy potente y f�cil de aprender.
En este manual de PHP
nos limitaremos pues a la utilizaci�n las instrucciones SQL b�sicas que ser�n
aprendidas a medida que explicamos las diferentes formas de actuar sobre una
base de datos dejando para el tutorial de
SQL los aspectos m�s avanzados.
Como base ejemplo de estos
cap�tulos hemos elegido MySQL, sin duda la base de datos m�s extendida en
combinaci�n con PHP. Su gratuidad, eficiencia y simplicidad la han hecho una
buena candidata.
Ya hemos explicado en cap�tulos anteriores su instalaci�n
a la vez que hemos presentado los comandos de base que nos pueden permitir
abordarla con una relativa facilidad.
En caso de utilizar cualquier otra
base compatible, las correcciones a llevar a cabo con respecto a nuestros
ejemplos no son excesivamente grandes y la lectura de esos cap�tulos sigue
siendo de gran utilidad.
Una vez instalado MySQL y antes de poder
comenzar con nuestros ejemplos, ser� necesario llevar a cabo las siguientes
operaciones:
-Introducidos dentro de MySQL, crearemos la base de datos
ejemplo con la siguiente sentencia:
-Seleccionaremos la
base ejemplo como la base a utilizar:
-Crearemos a continuaci�n la tabla
clientes a partir de la siguiente sentencia:
create table clientes ( nombre varchar(100), telefono
varchar(100) ); |
Ahora ya disponemos de nuestra
tabla vac�a. S�lo queda comenzar a llenarla con los datos que iremos insertando.
El conjunto de scripts utilizados para el bloque de bases de datos puede
ser descargado aqu�.
Introducci�n de nuevos
registros
Una vez creada la tabla clientes en nuestra
base de datos ejemplo, el paso siguiente sea llenarla con registros.
Los datos del registro pueden ser recogidos, por ejemplo, a partir de un
formulario. Aqu� os proponemos un simple documento HTML que recoge los datos y
los env�a a una p�gina PHP que se encarga de procesarlos:
<HTML> <HEAD> <TITLE>Insertar.html</TITLE> </HEAD> <BODY> <div
align="center"> <h1>Insertar un
registro</h1> <br> <FORM METHOD="POST"
ACTION="insertar.php"> Nombre<br> <INPUT TYPE="TEXT"
NAME="nombre"><br> Tel�fono<br> <INPUT TYPE="TEXT"
NAME="telefono"><br> <INPUT TYPE="SUBMIT"
value="Insertar"> </FORM> </div> </BODY> </HTML>
|
Llegados a la p�gina destino del formulario
(insertar.php), lo primero que habr� que hacer es establecer un v�nculo
entre el programa y la base de datos. Esta conexi�n se lleva a cabo con la
funci�n mysql_connect. A continuaci�n, deberemos generar una orden de
inserci�n del registro en lenguaje SQL. Esta orden ser� ejecutada por medio de
la funci�n mysql_db_query. En esta funci�n especificaremos primeramente
la base de datos sobre la que queremos actuar y a continuaci�n introduciremos la
sentencia SQL:
<HTML> <HEAD> <TITLE>Insertar.php</TITLE> </HEAD> <BODY> <? //Conexion
con la
base mysql_connect("localhost","tu_user","tu_password"); //Ejecucion
de la sentencia SQL mysql_db_query("ejemplo","insert into clientes
(nombre,telefono) values
('$nombre','$telefono')"); ?> <h1><div
align="center">Registro Insertado</div></h1> <div
align="center"><a href="lectura.php">Visualizar el contenido de
la base</a></div> </BODY> </HTML>
|
Los parametros user y
password son definidos por el creador de la base. Es conveniente en un
principio, al crear nuestras bases, trabajar sin ellos con lo cual dejaremos las
cadenas correspondientes vacias: "".
Adem�s de la propia inserci�n, el
programa avisa de la introducci�n del registro y ofrece un enlace hacia una
p�gina de lectura la cual ser� comentada a continuaci�n.
No entraremos
en la descripci�n de la orden SQL, para comprender m�s acerca de c�mo introducir
registros, refererirse al tutorial de
SQL.
Selecci�n y lectura
de registros
Dentro de una base de datos, organizada por
tablas, la selecci�n de una tabla entera o de un cierto numero de registros
resulta una operaci�n rutinaria.
Aqu� os mostramos una forma bastante
cl�sica de mostrar en pantalla a partir de un bucle los registros seleccionados
por una sentencia SQL:
<HTML> <HEAD> <TITLE>lectura.php</TITLE> </HEAD> <BODY> <h1><div
align="center">Lectura de la
tabla</div></h1> <br> <br> <? //Conexion
con la
base mysql_connect("localhost","tu_user","tu_password");
//Ejecutamos
la sentencia SQL $result=mysql_db_query("ejemplo","select * from
clientes"); ?> <table
align="center"> <tr> <th>Nombre</th> <th>Tel�fono</th> </tr> <? //Mostramos
los registros while ($row=mysql_fetch_array($result)) { echo
'<tr><td>'.$row["nombre"].'</td>'; echo
'<td>'.$row["telefono"].'</td></tr>'; } mysql_free_result($result) ?> </table>
<div
align="center"> <a href="insertar.html">A�adir un nuevo
registro</a><br> <a href="actualizar1.php">Actualizar
un registro existente</a><br> <a
href="borrar1.php">Borrar un
registro</a><br> </div>
</BODY> </HTML>
|
Los pasos a realizar son, en
un principio, los vistos para la inserci�n de un registro: Conexi�n a la base y
ejecuci�n de la sentencia. Esta vez, la informaci�n de dicha ejecuci�n ser�
almacenada en una variable ($result).
El siguiente paso ser�
plasmar en pantalla la informaci�n recogida en $result. Esto lo haremos mediante
la funci�n mysql_fetch_array que devuelve una variable array con los
contenidos de un registro a la vez que se posiciona sobre el siguiente. El bucle
while nos permite leer e imprimir secuencialmente cada uno de los
registros.
La funci�n mysql_free_result se encarga de liberar la
memoria utilizada para llevar a cabo la consulta. Aunque no es necesaria su
utilizaci�n, resulta altamente aconsejable.
Actualizacion de un registro
Para mostrar c�mo se
actualiza un registro presente en nuestra base de datos, vamos a hacerlo a
partir de un caso un poco m�s complejo para que empecemos a familiarizarnos con
estas operaciones. Realizaremos un par de scripts que permitan cambiar el numero
de tel�fono de las distintas personas presentes en nuestra base. El nombre de
estas personas, as� como el nuevo numero de tel�fono, ser�n recogidos por medio
de un formulario.
El archivo del formulario va a ser esta vez un script
PHP en el que efectuaremos una llamada a nuestra base de datos para construir un
men� desplegable donde aparezcan todos los nombres. La cosa quedar�a as�:
<HTML> <HEAD> <TITLE>Actualizar1.php</TITLE> </HEAD> <BODY> <div
align="center"> <h1>Actualizar un
registro</h1> <br> <? //Conexion con la
base mysql_connect("localhost","tu_user","tu_password");
echo
'<FORM METHOD="POST"
ACTION="actualizar2.php">Nombre<br>';
//Creamos la
sentencia SQL y la ejecutamos $sSQL="Select nombre From clientes Order
By nombre"; $result=mysql_db_query("ejemplo",$sSQL);
echo
'<select name="nombre">';
//Generamos el menu
desplegable while ($row=mysql_fetch_array($result)) {echo
'<option>'.$row["nombre"];} ?> </select> <br> Tel�fono<br> <INPUT
TYPE="TEXT" NAME="telefono"><br> <INPUT TYPE="SUBMIT"
value="Actualizar"> </FORM> </div>
</BODY> </HTML>
|
La manera de operar para construir el men�
desplegable es la misma que para visualizar la tabla. De nuevo empleamos un
bucle while en combinaci�n con la funci�n mysql_fetch_array lo que
nos permite mostrar cada una de las opciones.
El script de actualizaci�n
ser� muy parecido al de inserci�n:
<HTML> <HEAD> <TITLE>Actualizar2.php</TITLE> </HEAD> <BODY> <? //Conexion
con la
base mysql_connect("localhost","tu_user","tu_password");
//Creamos
la sentencia SQL y la ejecutamos $sSQL="Update Clientes Set
telefono='$telefono' Where
nombre='$nombre'"; mysql_db_query("ejemplo",$sSQL); ?>
<h1><div
align="center">Registro Actualizado</div></h1> <div
align="center"><a href="lectura.php">Visualizar el contenido de
la base</a></div>
</BODY> </HTML>
|
Borrado de un registro con PHP
Otra de las
operaciones elementales que se pueden realizar sobre una base de datos es borrar
un registro. Para hacerlo, SQL nos propone sentencias del tipo Delete.
Ve�moslo con un ejemplo aplicado a nuestra agenda. Primero, crearemos un men�
desplegable din�mico como para el caso de las actualizaciones:
<HTML> <HEAD> <TITLE>Borrar1.php</TITLE> </HEAD> <BODY> <div
align="center"> <h1>Borrar un
registro</h1> <br>
<? //Conexion con la
base mysql_connect("localhost","tu_user","tu_password");
echo
'<FORM METHOD="POST"
ACTION="borrar2.php">Nombre<br>';
//Creamos la sentencia
SQL y la ejecutamos $sSQL="Select nombre From clientes Order By
nombre"; $result=mysql_db_query("ejemplo",$sSQL);
echo
'<select name="nombre">';
//Mostramos los registros en forma
de men� desplegable while ($row=mysql_fetch_array($result)) {echo
'<option>'.$row["nombre"];} mysql_free_result($result) ?>
</select> <br> <INPUT
TYPE="SUBMIT"
value="Borrar"> </FORM> </div>
</BODY> </HTML>
|
El siguiente paso es hacer efectiva la operaci�n a
partir de la ejecuci�n de la sentencia SQL que construimos a partir de los datos
del formulario:
<HTML> <HEAD> <TITLE>Borrar2.php</TITLE> </HEAD> <BODY> <? //Conexion
con la
base mysql_connect("localhost","tu_user","tu_password");
//Creamos
la sentencia SQL y la ejecutamos $sSQL="Delete From Clientes Where
nombre='$nombre'"; mysql_db_query("ejemplo",$sSQL); ?>
<h1><div
align="center">Registro Borrado</div></h1> <div
align="center"><a href="lectura.php">Visualizar el contenido de
la base</a></div>
</BODY> </HTML>
|
Con este cap�tulo cerramos el
bloque de accesos a bases de datos con PHP. Para mas informaci�n relacionada
pod�is referiros al taller
de PHP donde podr�is encontrar alg�n que otro art�culo interesante al
respecto.
Subir una aplicaci�n PHP al
servidor
En el pasado me solicitaron que escribiese sobre un
tema que hasta ahora no hab�amos tocado m�s que de refil�n, que consiste en la
puesta en marcha de una aplicaci�n, programada en local, a nuestro servidor de
hosting, es decir, en el paso de subir todos los archivos PHP y la base de datos
a nuestro espacio en el servidor web contratado en un proveedor de alojamiento.
El tema espero que resulte familiar a muchas de las personas que leen
nuestros art�culos, ya que probablemente hayan tenido que pasar por esa etapa en
alguna ocasi�n, aunque pretendo dar algunas claves y truquillos que pueden
ayudar a todos, tengan o no experiencia en este asunto.
Subir los
archivos
Nuestro servidor web debe tener un directorio para la
publicaci�n de las p�ginas web. Ese ser�a el lugar donde hay que subir los
archivos .php.
Dependiendo del proveedor con el que trabajemos, el
directorio de publicaci�n puede variar. Generalmente, cuando contratamos un
alojamiento, nos proporcionan una cuenta de FTP con la que conectarnos al
servidor web y transferir los archivos de nuestro sitio, adem�s de unos datos
para la conexi�n, que ser�n el nombre del servidor y el usuario y contrase�a
para el acceso al FTP.
Al conectarnos al servidor con
los datos del FTP, que deben ser proporcionados por nuestro proveedor,
accederemos a un directorio. Este directorio podr�a ser el de publicaci�n,
aunque generalmente no es as�, sino que suele ser un subdirectorio llamado
"HTML" o "docs" o algo similar, que cuelga del directorio de inicio en nuestra
conexi�n FTP. Como dec�a, este directorio puede tener nombres distintos en
proveedores distintos, aunque, en cualquier caso, con una simple pregunta a
nuestro proveedor resolveremos esa duda.
Los archivos se deben subir al
directorio de publicaci�n, o a cualquier subdirectorio de este. En definitiva,
los tendremos que alojar por ah� dentro y para acceder a ellos bastar�a con
escribir el nombre del dominio o URL de nuestro alojamiento, seguido del nombre
del archivo. Si tuvi�semos un archivo llamado hola.php y nuestro alojamiento se
ha contratado para el dominio www.midominio.com, deber�amos subir ese archivo al
directorio de publicaci�n y acceder�amos al archivo escribiendo:
http://www.midominio.com/hola.php
Si creamos subdirectorios
dentro del directorio de publicaci�n podremos acceder a ellos escribiendo el
nombre del dominio o URL de nuestro alojamiento, seguido del nombre del
directorio y el nombre del archivo. Por ejemplo, si creamos un subdirectorio
llamado paginas y tenemos dentro un archivo llamado pag1.php, podr�amos acceder
a �l de la siguiente manera.
http://www.midominio.com/paginas/pag1.php
| Referencia: hay otro concepto interesante que
deber�amos conocer llegados a este punto, que es el "documento por
defecto". �ste no es m�s que el archivo que se env�a al navegador si en la
URL accedida no se especificaba ning�n archivo. Suele llamarse index.html
o index.php (o index.asp si nuestro servidor soporta programaci�n en ASP),
aunque puede variar de un proveedor a otro. Hablamos m�s sobre el documento
por defecto en nuestro manual de Publicar en Internet.
|
Colocar los
archivos PHP fuera del directorio de publicaci�n
Por decir
algo m�s sobre el tema de colocar los archivos, quer�a se�alar que cualquier
cosa que pongamos fuera del directorio de publicaci�n no podr� ser accedida a
trav�s del navegador. Es decir, si creamos un directorio que se llame
funciones_php en el mismo nivel que el directorio de publicaci�n (fuera del
directorio de publicaci�n) no podremos acceder con el explorador a los archivos
que coloquemos dentro de ninguna de las maneras. Esto es as� porque la URL de
inicio de nuestro alojamiento corresponde con ese directorio y no podemos
movernos hacia debajo de ese directorio con las URLs, que son la manera de
especificar al navegador los recursos a los que se quiere acceder.
No ser�a posible salir del
directorio de publicaci�n con una URL como esta, por mucho que utilicemos el
operador .. (que sirve para acceder al directorio padre).
http://www.midominio.com/../funciones_php/archivo_inalcanzable.php
Sin embargo, colocar algunos contenidos fuera del directorio de
publicaci�n puede ser muy �til. Por ejemplo, podr�amos colocar all� copias de
seguridad de algunos archivos o documentos que simplemente queremos guardar en
el servidor para acceder a ellos desde cualquier parte y con nuestro programa de
FTP.
Hay otra utilidad m�s interesante sobre colocar archivos fuera del
directorio de publicaci�n. Se trata de que muchas veces utilizamos en nuestros
programas trozos de c�digo repetidamente, por ejemplo, para abrir y cerrar bases
de datos, para mostrar la cabecera de nuestro portal, para comprobar que un
email escrito en un formulario es correcto, etc. Es muy �til separar estos
trozos de c�digo en un archivo a parte y llamar a este archivo con las funciones
PHP include() o require(). As�, si un d�a modificamos la cabecera de nuestro
portal, s�lo lo tendremos que modificar en un archivo, o, si cambia la base de
datos que utilizamos s�lo tendr�amos que modificar el archivo que hace la
conexi�n a la base de datos una vez, en lugar de ir cambi�ndolo en todas las
p�ginas PHP que abr�an las bases de datos.
Estos archivos no son p�ginas
independientes, sino trozos. Seguramente, si los ejecutamos por separado no
mostrar�an ning�n resultado v�lido, incluso podr�an dar mensajes de error. Por
esta raz�n merece la pena colocarlos en un lugar donde nadie pueda tener acceso:
fuera del directorio de publicaci�n. Con PHP si que podremos acceder a ese
directorio para incluir esos archivos. Solamente deber�amos utilizar las
funciones PHP include() o require() indicando la ruta para acceder a los
archivos.
En el caso de que tengamos una p�gina llamada hola.php en el
directorio de publicaci�n y un archivo, que se llama abre_base_datos.php, en el
directorio funciones_php, que est� fuera del directorio de publicaci�n, si
quisi�ramos acceder (desde hola.php) al archivo que abre la base de datos lo
har�amos as�.
include("../funciones_php/abre_base_datos.php")
Desde PHP s� que podemos acceder a los archivos que se encuentran fuera
del directorio de publicaci�n. Para ello especificamos la ruta adecuada, en la
que utilizamos el operador .. para bajar al directorio padre.
Nada m�s
que decir sobre la colocaci�n de los archivos: una vez situados en el directorio
de publicaci�n se podr� acceder a ellos con nuestro navegador y se deber�an
ejecutar perfectamente. Aunque cabe se�alar que, tanto PHP como el servidor
donde trabajemos, pueden tener configuraciones distintas y puede que alg�n
detalle de la programaci�n de nuestras p�ginas no funcione correctamente.
Por ejemplo, nuestro PHP puede declarar o no autom�ticamente las variables
que llegan a trav�s de un formulario. Si en local si que estaba configurado para
hacer esto y en remoto no, deber�amos localizar los lugares donde recogemos las
variables y utilizar las variables de entorno correctas (mirar art�culo sobre Procesar
variables de formularios y los comentarios al pie para saber m�s de esta
posible fuente de errores).
Aunque este no es un caso habitual, podemos ponernos en contacto con nuestro
proveedor de alojamiento para ver si pueden ayudarnos configurando el sistema o
indicando los pasos a seguir para solventar en nuestros scripts el asunto.
Comentario: el siguiente script calcula el nivel
de directorio de los scripts que queremos incluir en la p�gina actual.
// Hallamos el nivel de directorio en que est�
ubicada la p�gina 1. Se hace un recuento de los caracteres que
contiene el nombre del script actual. - $Chars =
count_chars($PHP_SELF,1); - 2. Exploramos la tabla de los
caracteres devueltos buscando el car�cter ('/' C�digo 47 ) de
directorio (carpeta) que devuelve Apache. - foreach ($Chars as
$Char=>$nChars){ if ($Char==47) {$n=$nChars;break;}
} - 3. Generamos una cadena de n-1 veces con la subcandena
"../" que nos da el nivel de directorio en que se encuentra el script.
- if ($n==0) $PathString=""; else
$PathString=str_pad("",($n-1)*3,"../");
|
Subir
una base de datos al sevidor de Internet
Aparte de los
archivos de la p�gina, debemos subir la base de datos con la que tenemos que
trabajar. Las bases de datos con las que trabaja PHP son muy variadas y en
distintos casos podemos utilizar una u otra, por lo que los modos de subir la
base de datos tambi�n pueden variar.
| Referencia: Este art�culo y los sucesivos, que
tratan sobre subir una base de datos MySQL al servidor, se engloban tanto
dentro del Manual de
PHP como del Taller de MySQL. Por
ello, ser� importante disponer de conocimientos de ambas tecnolog�as para
entender y aprovechar estas explicaciones. |
Es muy
corriente que nuestro proveedor de hosting ofrezca junto con PHP la base de
datos MySQL, as� que las notas para subir esa base de datos al servidor de este
art�culo van encaminadas a ofrecer soluciones para esa base de datos.
La
base de datos MySQL no se puede subir por FTP, como que se hac�a con los
archivos del c�digo PHP. Para subirla tendremos que utilizar otros mecanismos.
Voy a distinguir entre tres casos distintos en los que nos podr�amos encontrar
en este momento:
- La base de datos que pretendemos subir est� vac�a. Tan s�lo hemos
creado las tablas, pero no hemos introducido datos en ellas o, a lo sumo,
tienen alg�n dato que hemos introducido de pruebas.
- La base de datos que queremos subir est� completa y es una base de
datos MySQL. En este caso tenemos creada la base de datos en local y con
toda la informaci�n dentro y, por supuesto, queremos que esa informaci�n quede
tambi�n en la base de datos remota.
- La base de datos est� completa (como el caso anterior), pero no
es una base de datos MySQL. En este caso estar�amos haciendo una migraci�n
de la base de datos de un sistema gestor a otro.
Veremos los tres
casos por separado en adelante, aunque, antes de ello, vamos a mostrar unas
herramientas que nos servir�n de mucha ayuda para la administraci�n de cualquier
base de datos remota.
Las herramientas en concreto se relatan en el
manual Taller de MySQL,
son las siguientes:
- PhpMyAdmin. Una
aplicaci�n creada en PHP que podemos instalar en nuestro espacio de
alojamiento para administrar la base de datos.
- Mysql Control
Center (en adelante MyCC). Una aplicaci�n Windows que permite
contectarse a m�ltiples bases de datos MySQL, que se encuentren en local o en
remoto.
- Access. Tambi�n
permite administrar una base de datos MySQL conectada en local o en remoto. En
este caso se utiliza una interfaz que muchos ya conocen, como es Access, para
administrar una base de datos que nada tiene que ver con dicho programa.
En los tres casos lo que nos permite realizar el software de
administraci�n son tareas sobre la base de datos de todo tipo, como pueden ser
crear tablas, modificarlas, insertar datos, borrarlos, editarlos. Modificar o
borrar tablas o campos de las mismas, etc.
La elecci�n de una herramieta
o de otra pasa por los recursos que nos permitan utilizar en nuestro proveedor.
B�sicamente, lo que nos puede decantar a una opci�n u otra, es si permiten o no
conectar de manera remota la base de datos MySQL. Conozco alojamientos donde se
permite esa conexi�n remota y donde no.
Si no permiten conectarnos
remotamente nos decantaremos por PhpMyAdmin, pues es una aplicaci�n PHP que se
conecta en local y a la que se accede desde una p�gina web y eso lo permiten
todos los proveedores, incluso hay muchos que tienen instalado ya este software
para administrar las bases de datos.
En caso de que s� nos permitan
conectarnos remotamente con la base de datos, eligiremos MyCC o Access, que son
aplicaciones Windows mucho m�s potentes y r�pidas que las que utilizan interfaz
web, como PhpMyAdmin. Es preferible utilizar MyCC porque est� especialmente
desarrollado para conectar y operar con bases de datos MySQL.
Subir base de datos MySQL vac�a al
servidor
Es muy normal que hayamos dise�ado una base de datos
para nuestro proyecto desde 0, definiendo las distintas entidades de nuestro
modelo de datos, junto con sus campos y sus tipos.
En estos casos lo m�s
probable es que la base de datos est� vac�a, o bien contenga datos que hayamos
introducido a modo de prueba y que no queramos conservar cuando subamos la
aplicaci�n a Internet.
La opci�n m�s interesante entonces podr�a ser
crear otra vez las tablas que tenemos en local en la base de datos remota. Para
ello tenemos dos posibilidades.
a) Si tenemos pocas tablas y bastante
sencillas
Las podemos crear en remoto con alguna herramienta como PhpMyAdmin o MyCC.
b) Si
tiene muchas tablas y/o muy complicadas
La recomendaci�n ser�a hacer
un backup de la estructura en local y restaurarla en remoto. Esto nos evitar�
tener que volver a crear todas las tablas y definir todos sus campos y sus
tipos. Puede ser un poco m�s complicado pero sin duda nos ahorrar� tiempo.
Para hacer el backup de la estructura en local podemos utilizar alguna
herramienta como PhpMyAdmin, o bien
utilizar el comando mysqldump desde l�nea
de comandos de MS-DOS.
Herramienta de backup de PhpMyAdmin. Est�
marcada la opci�n de extraer solamente la estructura de las tablas. Si
marcamos adem�s la casilla "Send", nuestro navegador se descargar� el
backup en un fichero de texto. Si no lo pulsamos simplemente se
visualizar�. |
Lo que tenemos que hacer en este caso
es un backup de la estructura de la base de datos, es decir, los "create tables"
o sentencias SQL para crear las tablas. Ser�a un mont�n de sentencias con esta
forma:
#
--------------------------------------------------------
#
# Table
structure for table 'comentario'
#
CREATE TABLE comentario (
id_comentario int(5) unsigned NOT NULL auto_increment,
id_articulo int(4) DEFAULT '0' NOT NULL,
comentario text NOT NULL,
fecha
int(14) unsigned DEFAULT '0' NOT NULL,
revisado
tinyint(1) DEFAULT '0' NOT NULL,
nombre_comentario
varchar(100) DEFAULT 'Nombre no especificado' NOT NULL,
email_comentario varchar(100) DEFAULT 'Email sin especificar' NOT NULL,
tipo tinyint(1) unsigned DEFAULT '1' NOT NULL,
PRIMARY KEY (id_comentario)
);
Para restaurar estas sentencias tenemos opciones tanto dentro
de PhpMyAdmin como de MyCC. En ambos casos lo que tenemos que hacer es ejecutar
estas sentencias en el servidor MySQL remoto. En PhpMyAdmin tenemos un campo
para introducir sentencias SQL y tambi�n otro campo para seleccionar un archivo
de texto con todas las sentencias SQL, para ejecutarlas una detr�s de otra. En
MyCC tenemos un bot�n que nos permite abrir una consola donde introducir una o
varias sentencias SQL y ejecutarlas.
Herramienta de backup y restauraci�n de
PhpMyAdmin
Bot�n para introducir sentencias SQL en
MyCC
Repetimos, esto s�lo nos servir� para subir la
estructura de la base de datos y no los datos que contenga. Si deseamos subir
tambi�n la informaci�n de la base de datos entonces debemos utilizar otras
estrategias, relatadas pr�ximamente.
Subir una base de datos MySQL con la estructura y los
datos
Si la base de datos que deseamos subir est� llena de
informaci�n y deseamos que se conserve una vez subida la base de datos a remoto,
tenemos que realizar un backup de la base de datos y restaurarlo en remoto.
| Nota: Estas recomendaciones est�n pensadas para
subir una base de datos MySQL que podamos tener en local a una base de
datos MySQL que hayamos contratado en remoto. Si la base origen no es
MySQL estar�amos hablando de una migraci�n de bases de datos, pero esto lo
veremos en un art�culo
m�s adelante. |
En este caso el procedimiento
ser�a muy parecido al de subir una base
de datos vac�a, relatado anteriormente, con la salvedad de que ahora debemos
extraer no solo la estructura de la base de datos, sino tambi�n los registros
que contiene.
Para ello podemos utilizar mysqldump, seg�n se relata en
este art�culo, o
bien PhpMyAdmin,
seleccionando la opci�n que indica que el backup contenga la estructura y los
datos (Structure and data en versiones en ingl�s).
La estructura y los
datos vendr�n en un fichero de texto con una serie de sentencias SQL para crear
las tablas y los insert necesarios para introducir cada uno de los datos.
Para restaurar la base de datos lo haremos tal como se ha relatado para
el caso de que la base de datos estuviera vac�a, con la ayuda de una instalaci�n
de PhpMyAdmin en remoto o un MyCC que se conecte a la base de datos contratada
en el servidor de Internet.
Si tenemos problemas para subir el fichero
de backup de la base de datos es posible que en nuestro proveedor de alojamiento
nos pueda ayudar a subir el fichero y restaurarlo. Como el proveedor dispone de
los servidores en sus propias instalaciones, tiene muchas m�s posibilidades que
nosotros para trabajar con las bases de datos, sin temor a que las lentas
comunicaciones por Internet arrojen errores en la restauraci�n de los datos.
Si nuestro proveedor no puede ayudarnos, seguramente disponga y nos
indique alg�n mecanismo para realizar la tarea sin lugar a errores. Puede
ocurrinos con alg�n proveedor que nos diga que se encarga de todo pero nos exija
el pago de las horas de trabajo del inform�tico que va a restaurar el backup de
la base de datos. Si no pone facilidades ni siquiera en esto posiblemente sea
mejor ir pidi�ndoles que nos devuelvan el dinero invertido porque su servicio no
ser�a muy bueno.
Migrar una base de
datos a MySQL
El �ltimo caso en el que nos podemos encontrar a
la hora de subir una base de datos a nuestro proveedor de alojamiento es que la
base de datos la tengamos creada en local, pero en un sistema gestor distinto
del que vamos a utilizar en remoto. En remoto suponemos siempre que vamos a
utilizar la base de datos MySQL.
En local podr�amos disponer de una base de datos Access,
SQL
Server o de otro sistema de base de datos.
El proceso de la
migraci�n puede ser bastante complejo y, como hay tantas bases de datos
distintas, dif�cil de dar una receta que funcione en todos los casos. Adem�s,
aparte de la dificultad de transferir la informaci�n entre los dos sistemas
gestores de base de datos, tambi�n nos influir� mucho en la complejidad del
problema el tipo de los datos de las tablas que estamos utilizando. Por ejemplo,
las fechas, los campos num�ricos con decimales o los boleanos pueden dar
problemas al pasar de un sistema a otro porque pueden almacenarse de maneras
distintas o, en el caso de los n�meros, con una precisi�n distinta.
Recomendaciones para migrar de Access a MySQL
Si nuestra
base de datos anterior estaba construida en Access lo tenemos bastante f�cil,
gracias a que MySQL
dispone de un driver ODBC para sistemas Windows, que nos permite conectar Access con el
propio MySQL y pasar informaci�n f�cilmente.
Este tema est� relatado
en el art�culo Exportar
datos de MySQL a Access, aunque hay que indicar que si deseamos hacer una
exportaci�n desde Access en local a MySQL en remoto puede haber problemas porque
no todos los alojadores permiten las conexiones en remoto con la base de datos.
Si no tenemos disponible una conexi�n en remoto con nuestro servidor de bases de
datos vamos a tener que cambiar la estrategia un poco.
La idea en este
�ltimo caso es instalar MySQL en local y realizar la migraci�n desde Access en
local a MySQL en local y luego podr�amos hacer un backup de la
base de datos local y subirla a remoto, tal y como se ha relatado antes.
Recomendaciones para migrar desde SQL Server a MySQL
La
verdad es que no he tenido este caso nunca, pero hay que decir que Access
tambi�n nos puede ayudar en este caso. Access permite seleccionar una base de
datos SQL Server y trabajar desde la propia interfaz de Access. La idea es que
Access tambi�n permite trabajar con MySQL y posiblemente haciendo un puente
entre estos dos sistemas gestores podemos exportar datos de SQL Server a MySQL.
Lo que es seguro que utilizando el propio Access de puente podr�amos
realizar el trabajo. Primero exportando de SQL Server a Acess y luego desde
Access a MySQL.
Otras bases de datos u otras t�cnicas
Si
la base de datos origen dispone de un driver ODBC no habr� (en teor�a) problema
para conectarla con Access, de manera similar a como se conecta con MySQL.
Entonces podr�amos utilizar Access para exportar los datos, porque desde all� se
podr�an acceder a los dos sistemas gestores de bases de datos.
Si no
tenemos Access, o la base de datos original no tiene driver ODBC, o bien no nos
funciona correctamente el proceso y no sabemos c�mo arreglarlo, otra posibilidad
es exportar los datos a ficheros de texto, separados por comas o algo parecido.
Muchas bases de datos tienen herramientas para exportar los datos de las tablas
a ficheros de texto, los cuales se pueden luego introducir en nuestro sistema
gestor destino (MySQL) con la ayuda de alguna herramienta como PhpMyAdmin.
Para ello, en la p�gina de propiedades de la tabla encontraremos una
opci�n para hacer el backup de la tabla y para introducir ficheros de texto
dentro de una tabla (Insert textfiles into table en ingl�s).
Accediendo a ese enlace podremos ver un formulario donde
introducir las caracter�sticas del fichero de texto, como el car�cter utilizado
como separador de campos, o el terminador de l�neas, etc, junto con el propio
archivo con los datos, y PhpMyAdmin se encargar� de todo el trabajo de incluir
esos datos en la tabla.
Como se habr� supuesto, es necesario tener creada la tabla
en remoto para que podamos introducirle los datos del fichero de texto.
Cambios de un formato de datos a otro
Toda la migraci�n
tiene que tener en cuenta muy especialmente, como ya se se�al�, las maneras que
tenga cada base de datos de guardar la informaci�n, es decir, del formato de sus
tipos de datos. Tenemos que contar siempre con la posible necesidad de
transformar algunos datos como pueden ser los campos boleanos, fechas, campos
memo (texto con longitud indeterminada), etc, que pueden almacenarse de maneras
distintas en cada uno de los sistemas gestores, origen y destino.
En
algunos casos posiblemente tengamos que realizar alg�n script que realice los
cambios necesarios en los datos. Por ejemplo puede ser para localizar los
valores boleanos guardados como true / false a valores enteros 0 / 1, que es
como se guarda en MySQL. Tambi�n las fechas pueden sufrir cambios de formato,
mientras que en Access aparecen en castellano (dd/mm/aaaa) en MySQL aparecen en
el formato aaaa-mm-dd. PHP puede ayudarnos en la tarea de hacer este script,
tambi�n Visual Basic Script para Access puede hacer estas tareas complejas y el
propio lenguaje SQL, a base de sentencias dirigidas contra la base de datos,
puede servir para algunas acciones sencillas.
Programaci�n orientada a objetos en PHP
La
programaci�n orientada a objetos es una metodolog�a de programaci�n avanzada y
bastante extendida, en la que los sistemas se modelan creando clases, que son un
conjunto de datos y funcionalidades. Las clases son definiciones, a partir de
las que se crean objetos. Los objetos son ejemplares de una clase determinada y
como tal, disponen de los datos y funcionalidades definidos en la clase.
La programaci�n orientada a objetos permite concebir los programas de
una manera bastante intuitiva y cercana a la realidad. La tendencia es que un
mayor n�mero de lenguajes de programaci�n adopten la programaci�n orientada a
objetos como paradigma para modelizar los sistemas. Prueba de ello es la nueva
versi�n de PHP (5), que implanta la programaci�n de objetos como metodolog�a de
desarrollo. Tambi�n Microsoft ha dado un vuelco hacia la programaci�n orientada
a objetos, ya que .NET dispone de varios lenguajes para programar y todos
orientados a objetos.
As� pues, la programaci�n orientada a objetos es
un tema de gran inter�s, pues es muy utilizada y cada vez resulta m�s esencial
para poder desarrollar en casi cualquier lenguaje moderno. En este art�culo
vamos ver algunas nociones sobre la programaci�n orientada a objetos en PHP.
Aunque es un tema bastante amplio, novedoso para muchos y en un principio,
dif�cil de asimilar, vamos a tratar de explicar la sintaxis b�sica de PHP para
utilizar objetos, sin meternos en mucha teor�a de programaci�n orientada a
objetos en general.
Referencia: Se puede acceder a una descripci�n de la
programaci�n orientada a objetos, publicada en DesarrolloWeb.com. http://www.desarrolloweb.com/articulos/499.php
Las
clases: class
Una clase es un conjunto de variables, llamados
atributos, y funciones, llamadas m�todos, que trabajan sobre esas variables. Las
clases son, al fin y al cabo, una definici�n: una especificaci�n de propiedades
y funcionalidades de elementos que van a participar en nuestros programas.
Por ejemplo, la clase "Caja" tendr�a como atributos caracter�sticas como
las dimensiones, color, contenido y cosas semejantes. Las funciones o m�todos
que podr�amos incorporar a la clase "caja" son las funcionalidades que deseamos
que realice la caja, como introduce(), muestra_contenido(), comprueba_si_cabe(),
vaciate()...
Las clases en PHP se definen de la siguiente manera:
<?
class Caja{
var
$alto;
var $ancho;
var $largo;
var $contenido;
var $color;
function introduce($cosa){
$this->contenido =
$cosa;
}
function muestra_contenido(){
echo
$this->contenido;
}
}
?>
En este ejemplo se ha
creado la clase Caja, indicando como atributos el ancho, alto y largo de la
caja, as� como el color y el contenido. Se han creado, para empezar, un par de
m�todos, uno para introducir un elemento en la caja y otro para mostrar el
contenido.
Si nos fijamos, los atributos se definen declarando unas
variables al principio de la clase. Los m�todos se definen declarando funciones
dentro de la clase. La variable $this, utilizada dentro de los m�todos la
explicaremos un poco m�s abajo.
Utilizar la clase
Las
clases solamente son definiciones. Si queremos utilizar la clase tenemos que
crear un ejemplar de dicha clase, lo que corrientemente se le llama instanciar
un objeto de una clase.
$micaja = new Caja;
Con esto hemos creado, o mejor dicho, instanciado, un objeto de la clase
Caja llamado $micaja.
$micaja->introduce("algo");
$micaja->muestra_contenido();
Con estas dos sentencias
estamos introduciendo "algo" en la caja y luego estamos mostrando ese contendido
en el texto de la p�gina. Nos fijamos que los m�todos de un objeto se llaman
utilizando el c�digo "->".
nombre_del_objeto->nombre_de_metodo()
Para
acceder a los atributos de una clase tambi�n se accede con el c�digo "->". De
esta forma:
nombre_del_objeto->nombre_del_atributo
La
variable $this
Dentro de un m�todo, la variable $this hace
referencia al objeto sobre el que invocamos el m�todo. En la invocaci�n
$micaja->introduce("algo") se est� llamando al m�todo introduce sobre el
objeto $micaja. Cuando se est� ejecutando ese m�todo, se vuelca el valor que
recibe por par�metro en el atributo contenido. En ese caso $this->contenido
hace referencia al atributo contenido del objeto $micaja, que es sobre el que se
invocaba el m�todo.
Constructores en
PHP
Los constructores son funciones, o m�todos, que se
encargan de realizar las tareas de inicializaci�n de los objetos al ser
instanciados. Es decir, cuando se crean los objetos a partir de las clases, se
llama a un constructor que se encarga de inicializar los atributos del objeto y
realizar cualquier otra tarea de inicializaci�n que sea necesaria.
No es
obligatorio disponer de un constructor, pero resultan muy �tiles y su uso es muy
habitual. En el ejemplo de la caja, que coment�bamos en el anterior art�culo de programaci�n
orientada a objetos en PHP, lo normal ser�a inicializar las variables como
color o las relacionadas con las dimensiones y, adem�s, indicar que el contenido
de la caja est� vac�o. Si no hay un constructor no se inicializan ninguno de los
atributos de los objetos.
El constructor se define dentro de la propia
clase, como si fuera otro m�todo. El �nico detalle es que el constructor debe
tener el mismo nombre que la clase. Atentos a PHP, que diferencia entre
may�sculas y min�sculas.
Para la clase Caja definida anteriormente, se
podr�a declarar este constructor:
function
Caja($alto=1,$ancho=1,$largo=1,$color="negro"){
$this->alto=$alto;
$this->ancho=$ancho;
$this->largo=$largo;
$this->color=$color;
$this->contenido="";
}
En este constructor recibimos por par�metro todos los atributos
que hay que definir en una caja.
Es muy �til definir unos valores por
defecto en los par�metros que recibe el constructor, igualando el par�metro a un
valor dentro de la declaraci�n de par�metros de la funci�n constructora, pues
as�, aunque se llame al constructor sin proporcionar par�metros, se inicializar�
con los valores por defecto que se hayan definido.
Es importante se�alar
que en los constructores no se tienen por qu� recibir todos los valores para
inicializar el objeto. Hay algunos valores que pueden inicializarse a vac�o o a
cualquier otro valor fijo, como en este caso el contenido de la caja, que
inicialmente hemos supuesto que estar� vac�a.
Herencia en PHP
La programaci�n orientada a objetos
tiene un mecanismo llamado herencia por el que se pueden definir clases a partir
de otras clases. Las clases realizadas a partir de otra clase o mejor dicho, que
extienden a otra clase, se llaman clases extendidas o clases derivadas.
Las clases extendidas heredan todos los atributos y m�todos de la clase
base. Adem�s, pueden tener tantos atributos y m�todos nuevos como se desee.
Para ampliar el ejemplo que venimos desarrollando, la clase Caja, vamos
a crear una clase extendida llamada Caja_tematica. Esta clase hereda de caja,
pero adem�s tiene un "tema", que es la descripci�n del tipo de cosas que metemos
en la caja. Con esto podemos tener varias cajas, cada una con cosas de un tema
concreto.
class Caja_tematica extends Caja{
var $tema;
function
define_tema($nuevo_tema){
$this->tema = $nuevo_tema;
}
}
En esta clase heredamos de Caja, con lo
que tenemos a nuestra disposici�n todos los atributos y m�todos de la clase
base. Adem�s, se ha definido un nuevo atributo, llamado $tema, y un m�todo,
llamado define_tema(), que recibe el tema con el que se desea etiquetar la caja.
Podr�amos utilizar la clase Caja_tematica de manera similar a como lo
hac�amos con la clase Caja original.
$micaja_tematica = new Caja_tematica();
$micaja_tematica->define_tema("Cables y contectores");
$micaja_tematica->introduce("Cable de red");
$micaja_tematica->introduce("Conector RJ45");
$micaja_tematica->muestra_contenido();
En este caso, el
resultado que se obtiene es parecido al que se obtiene para la clase base. Sin
embargo, cuando se muestra el contenido de una caja, lo m�s interesante ser�a
que se indicara tambi�n el tipo de objetos que contiene la caja tem�tica. Para
ello, tenemos que redefinir el m�todo muestra_contenido().
Redefinir
m�todos en clases extendidas
Redefinir m�todos significa volver a
codificarlos, es decir, volver a escribir su c�digo para la clase extendida. En
este caso, tenemos que redefinir el m�todo muestra_contenido() para que muestre
tambi�n el tema de la caja.
Para redefinir un m�todo, lo �nico que
debemos hacer es volverlo a escribir dentro de la clase extendida.
function muestra_contenido(){
echo "Contenido de
la caja de <b>" . $this->tema . "</b>: " . $this->contenido;
}
En este ejemplo hemos codificado de nuevo el m�todo entero
para mostrar los datos completos.
En algunas ocasiones es muy �til
apoyarse en la definici�n de un m�todo de la clase base para realizar las
acciones de la clase extendida. Por ejemplo, para este ejemplo, tenemos que
definir un constructor para la clase Caja_tematica, en el que tambi�n se
inicialice el tema de la caja. Como ya existe un m�todo constructor en la clase
base, no merece la pena reescribir el c�digo de �ste, lo mejor es llamar al
constructor que hab�a definido en la clase Caja original, con lo que se
inicializar�n todos los datos de la clase base, y luego realizar la
inicializaci�n para los atributos de la propia clase extendida.
Para
llamar a un m�todo de la clase padre dentro del c�digo de un m�todo que estamos
redefiniendo, utilizamos una sintaxis como esta:
function
Caja_tematica($alto=1,$ancho=1,$largo=1,$color="negro",$tema="Sin
clasificaci�n"){
parent::Caja($alto,$ancho,$largo,$color);
$this->tema=$tema;
}
Aqu� vemos la
redefinici�n del constructor, de la clase Caja, para la clase Caja_tematica. El
constructor hace primero una llamada al constructor de la clase base, a trav�s
de una referencia a "parent". Luego inicializa el valor del atributo $tema, que
es espec�fico de la Caja_tematica.
En la misma l�nea de trabajo, podemos
redefinir el m�todo muestra_contenido() apoy�ndonos en el que fue declarado en
la clase base. El c�digo quedar�a como sigue:
function muestra_contenido(){
echo "Contenido de
la caja de <b>" . $this->tema . "</b>: ";
parent::muestra_contenido();
}
Autores del manual:
Hay que agradecer a diversas personas la dedicaci�n prestada para la
creaci�n de este manual. Sus nombres junto con el n�mero de art�culos redactados
por cada uno son los siguientes:
- Miguel Angel Alvarez
Director de DesarrolloWeb.com
(16 cap�tulos)
- Rub�n Alvarez
(24 cap�tulos)
- Carlos Luis Cuenca
(1
cap�tulo)